介绍

  1. 包含了很多类和接口

  2. 元素:窗口、按钮、文本框

  3. java.awt

Frame

就是一个窗口

实现
package com.yeyue.lesson01;

import java.awt.*;

public class TestFrame2 {
   public static void main(String[] args) {

       //展示多个窗口
       MyFrame myFrame = new MyFrame(100,100,200,200,Color.blue);
       MyFrame myFrame2 = new MyFrame(300,100,200,200,Color.yellow);
       MyFrame myFrame3 = new MyFrame(100,300,200,200,Color.red);
       MyFrame myFrame4 = new MyFrame(300,300,200,200,Color.MAGENTA);

  }
}

class MyFrame extends Frame{
   static int id = 0; //可能需要多个窗口,我们需要一个计数器

   public MyFrame (int x,int y,int w,int h,Color color){
       super("Myframe" + (++id));
       setBackground(color);
       setBounds(x,y,w,h);
       setVisible(true);
  }
}
结果展示

面板Panel

无法单独显示,必须添加到某个容器中

实现
package com.yeyue.lesson01;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

//Panel 可以砍成是一个空间,但是不能单独存在
public class TestPanel {
   public static void main(String[] args) {
       Frame frame = new Frame();
       //布局的概念
       Panel panel = new Panel();

       //设置布局
       frame.setLayout(null);

       //坐标
       frame.setBounds(300,300,500,500);
       frame.setBackground(new Color(40,161,35));

       //Panel 设置坐标,相当于frame
       panel.setBounds(50,50,400,400);
       panel.setBackground(new Color(159, 159, 186));

       //frame.add(Panel)
       frame.add(panel);

       frame.setVisible(true);

       //监听事件,监听窗口关闭事件 system.exit(0)
       //适配器模式
       frame.addWindowListener(new WindowAdapter() {
           //窗口点击关闭的时候需要做的事情
           @Override
           public void windowClosing(WindowEvent e) {
               //结束程序
               System.exit(0);

          }
      });

  }
}
结果展示

布局管理器

流式布局Flow
实现
package com.yeyue.lesson01;

import java.awt.*;

public class TestFlowLayout {
   public static void main(String[] args) {
       Frame frame = new Frame();

       //组件按钮
       Button button1 = new Button("button1");
       Button button2 = new Button("button2");
       Button button3 = new Button("button3");

       //设置为流式布局
       //frame.setLayout(new FlowLayout());
       //frame.setLayout(new FlowLayout(FlowLayout.LEFT));
       frame.setLayout(new FlowLayout(FlowLayout.RIGHT));


       frame.setSize(200,200);

       //把按钮加上去
       frame.add(button1);
       frame.add(button2);
       frame.add(button3);

       frame.setVisible(true);
  }
}
结果展示

东西南北中Border
实现
package com.yeyue.lesson01;

import java.awt.*;

public class TestBorderLayout {
   public static void main(String[] args) {
       Frame frame = new Frame("TestBorderLayout");

       //组件按钮
       Button east = new Button("East");
       Button west = new Button("West");
       Button south = new Button("South");
       Button north = new Button("North");
       Button center = new Button("Center");

       frame.add(east,BorderLayout.EAST);
       frame.add(west,BorderLayout.WEST);
       frame.add(south,BorderLayout.SOUTH);
       frame.add(north,BorderLayout.NORTH);
       frame.add(center,BorderLayout.CENTER);

       frame.setSize(200,200);

       frame.setVisible(true);
  }
}
结果展示

表格布局Grid
实现
package com.yeyue.lesson01;

import java.awt.*;

public class TestGridLayout {
   public static void main(String[] args) {
       Frame frame = new Frame("TestBorderLayout");

       //组件按钮
       Button bth1 = new Button("bth1");
       Button bth2 = new Button("bth2");
       Button bth3 = new Button("bth3");
       Button bth4 = new Button("bth4");
       Button bth5 = new Button("bth5");
       Button bth6 = new Button("bth6");

       frame.setLayout(new GridLayout(3,2));

       frame.add(bth1);
       frame.add(bth2);
       frame.add(bth3);
       frame.add(bth4);
       frame.add(bth5);
       frame.add(bth6);

       frame.pack(); //java 函数
       frame.setSize(200,200);

       frame.setVisible(true);
  }
}
结果展示

布局管理器综合练习

先分析过程,然后写代码逐步实现

实现
package com.yeyue.lesson01;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Test {
   public static void main(String[] args) {
       Frame frame = new Frame();

       frame.setSize(400,300);
       frame.setLocation(300,400);
       frame.setBackground(Color.black);
       frame.setVisible(true);
       frame.setLayout(new GridLayout(2,1));

       Panel p1 = new Panel(new BorderLayout());
       Panel p2 = new Panel(new GridLayout(2,1));
       Panel p3 = new Panel(new BorderLayout());
       Panel p4 = new Panel(new GridLayout(2,2));

       p1.add(new Button("East-1"),BorderLayout.EAST);
       p1.add(new Button("West-1"),BorderLayout.WEST);
       p2.add(new Button("p2-btn-1"));
       p2.add(new Button("p2-btn-2"));
       p1.add(p2,BorderLayout.CENTER);

       p3.add(new Button("East-2"),BorderLayout.EAST);
       p3.add(new Button("West-2"),BorderLayout.WEST);
       for (int i = 0; i < 4; i++) {
           p4.add(new Button("for-" + i));
      }
       p3.add(p4,BorderLayout.CENTER);

       frame.add(p1);
       frame.add(p3);


       frame.addWindowListener(new WindowAdapter() {
           @Override
           public void windowClosing(WindowEvent e) {
               System.exit(0);
          }
      });

  }
}
结果展示

事件监听

实例
package com.yeyue.lesson02;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestActionEvent {
   public static void main(String[] args) {
       //按下按钮 ,触发一些事件
       Frame frame = new Frame();
       Button button = new Button();

       //因为,addActionListener() 需要一个ActionListener,所以我们构建一个ActionListener
       MyActionListener myActionListener = new MyActionListener();
       button.addActionListener(myActionListener);

       frame.add(button,BorderLayout.CENTER);
       frame.pack();
       frame.setVisible(true);

       windowsClose(frame);


  }
   public static void windowsClose(Frame frame){
       frame.addWindowListener(new WindowAdapter() {
           @Override
           public void windowClosing(WindowEvent e) {
               System.exit(0);
          }
      });
  }
}

//事件监听
class MyActionListener implements ActionListener{
   @Override
   public void actionPerformed(ActionEvent e) {
       System.out.println("aaa");
  }
}
多个按钮共享一个事件
package com.yeyue.lesson02;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestActionEvent2 {
   public static void main(String[] args) {
       //两个按钮,实现同一个监听
       //开始 结束
       Frame frame = new Frame("开始-停止");

       Button button1 = new Button("start");
       Button button2 = new Button("stop");

       //可以显示的定义触发会返回的命令,如果不显示定义,则会走默认值
       //可以多个按钮只写一个监听类
       button1.setActionCommand("button1-start");
       button2.setActionCommand("button2-stop");

       MyMonitor myMonitor = new MyMonitor();

       button1.addActionListener(myMonitor);
       button2.addActionListener(myMonitor);

       frame.add(button1,BorderLayout.NORTH);
       frame.add(button2,BorderLayout.SOUTH);

       frame.pack();
       frame.setVisible(true);

       windowsClose(frame);
  }
   public static void windowsClose(Frame frame){
       frame.addWindowListener(new WindowAdapter() {
           @Override
           public void windowClosing(WindowEvent e) {
               System.exit(0);
          }
      });
  }
}

class MyMonitor implements ActionListener{
   @Override
   public void actionPerformed(ActionEvent e) {
       //
       System.out.println("按钮被点击了:msg=> " + e.getActionCommand());

  }
}

输入框TextField

package com.yeyue.lesson02;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TestText {
   public static void main(String[] args) {
       //启动
       new MyFrame();
  }
}

class MyFrame extends Frame{
   public MyFrame(){
       TextField textField = new TextField();
       add(textField);

       //监听这个文本框输入的文字
       MyActionListener2 myActionListener2 = new MyActionListener2();
       //按下 enter 就会触发这个输入框的事件
       textField.addActionListener(myActionListener2);

       //设置替换编码
       textField.setEchoChar('*');

       setVisible(true);
       pack();


  }

}

class MyActionListener2 implements ActionListener{
   @Override
   public void actionPerformed(ActionEvent e) {
       TextField field = (TextField) e.getSource(); //获取一些资源,返回的一个对象
       System.out.println(field.getText()); //获取文本框中输入的文本
       field.setText(""); //null ""
  }
}

简易计算器,组合+内部类

oop原则:组合大于继承

package com.yeyue.lesson02;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

//简易计算器
public class TestCacu {
   public static void main(String[] args) {
       new Calculator();
  }
}

//计算器类
class Calculator extends Frame{
   public Calculator(){
       //三个文本框
       TextField num1 = new TextField(10);//字符数
       TextField num2 = new TextField(10);//字符数
       TextField num3 = new TextField(20);//字符数

       //一个按钮
       Button button = new Button("=");
       button.addActionListener(new MyCalculatorListener(num1,num2,num3));

       //一个标签
       Label label = new Label("+");

       //布局
       setLayout(new FlowLayout());

       add(num1);
       add(label);
       add(num2);
       add(button);
       add(num3);

       pack();
       setVisible(true);
  }
}

//监听器类
class MyCalculatorListener implements ActionListener {
   //获取三个变量
   private TextField num1,num2,num3;

   public MyCalculatorListener(TextField num1,TextField num2,TextField num3){
       this.num1 = num1;
       this.num2 = num2;
       this.num3 = num3;
  }

   @Override
   public void actionPerformed(ActionEvent e) {
       //1. 获得加数和被加数
       int n1 = Integer.parseInt(num1.getText());
       int n2 = Integer.parseInt(num2.getText());

       //2. 将这个这个值 + 法 运算后,放到第三个框
       num3.setText("" + (n1+n2));

       //3. 清除前两个框
       num1.setText("");
       num2.setText("");

  }
}
完全改造为面向对象写法
package com.yeyue.lesson02;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

//简易计算器
public class TestCacu {
   public static void main(String[] args) {
       new Calculator().loadFrame();
  }
}

//计算器类
class Calculator extends Frame {

   //属性
   TextField num1, num2, num3;

   //方法
   public void loadFrame(){

       num1 = new TextField(10);//字符数
       num2 = new TextField(10);//字符数
       num3 = new TextField(20);//字符数
       Label label = new Label("+");
       Button button = new Button("=");

       button.addActionListener(new MyCalculatorListener(this));

       setLayout(new FlowLayout());
       add(num1);
       add(label);
       add(num2);
       add(button);
       add(num3);

       pack();
       setVisible(true);
  }
}

//监听器类
class MyCalculatorListener implements ActionListener {
   //获取计算器这个对象,在一个类中组合另一个类
   Calculator calculator = null;

   public MyCalculatorListener(Calculator calculator){
       this.calculator = calculator;
  }

   @Override
   public void actionPerformed(ActionEvent e) {

       int n1 = Integer.parseInt(calculator.num1.getText());
       int n2 = Integer.parseInt(calculator.num2.getText());

       calculator.num3.setText(""+(n1+n2));
       calculator.num1.setText("");
       calculator.num2.setText("");

  }
}
内部类
  • 更好的包装

package com.yeyue.lesson02;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

//简易计算器
public class TestCacu {
   public static void main(String[] args) {
       new Calculator().loadFrame();
  }
}

//计算器类
class Calculator extends Frame {

   //属性
   TextField num1, num2, num3;

   //方法
   public void loadFrame() {

       num1 = new TextField(10);//字符数
       num2 = new TextField(10);//字符数
       num3 = new TextField(20);//字符数
       Label label = new Label("+");
       Button button = new Button("=");

       button.addActionListener(new MyCalculatorListener());

       setLayout(new FlowLayout());
       add(num1);
       add(label);
       add(num2);
       add(button);
       add(num3);

       pack();
       setVisible(true);
  }

   //监听器类
   //内部类最大的好处就是可以畅通无阻的访问外部的属性和方法
   private class MyCalculatorListener implements ActionListener {
       //获取计算器这个对象,在一个类中组合另一个类
       Calculator calculator = null;

       @Override
       public void actionPerformed(ActionEvent e) {

           int n1 = Integer.parseInt(num1.getText());
           int n2 = Integer.parseInt(num2.getText());

           num3.setText("" + (n1 + n2));
           num1.setText("");
           num2.setText("");

      }
  }
}

画笔

package com.yeyue.lesson03;

import java.awt.*;

public class TestPaint {
   public static void main(String[] args) {
       new MyPaint().loadFrame();
  }
}

class MyPaint extends Frame{

   public void loadFrame(){
       setBounds(200,200,600,500);
       setVisible(true);
  }

   @Override
   public void paint(Graphics g) {
       //画笔,需要有颜色,可以画画
       g.setColor(Color.red);
       g.drawOval(100,100,100,100);
       g.fillOval(200,200,100,100);  //实心的圆

       g.setColor(Color.GREEN);
       g.drawRect(150,200,200,200);
       g.fillRect(300,10,200,200);

       //养成习惯,画笔用完,将他还原到最初的颜色
  }
}

鼠标监听

目的:实现鼠标画画

package com.yeyue.lesson03;

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;

public class TestMouseListener {
   public static void main(String[] args) {
       new MyFrame("画图");
  }
}

class MyFrame extends Frame{
   //需要监听鼠标当前的位置,需要集合来存储这个点
   ArrayList points;

   public MyFrame(String title){
       super(title);
       setBounds(200,200,400,400);

       //存鼠标的点
       points = new ArrayList<>();

       //鼠标监听器,正对这个窗口
       this.addMouseListener(new MyMouseListener());

       setVisible(true);
  }

   @Override
   public void paint(Graphics g) {
       //画画 监听鼠标的事件
       Iterator iterator = points.iterator();
       while (iterator.hasNext()){
           Point point = (Point) iterator.next();
           g.setColor(Color.blue);
           g.fillOval(point.x,point.y,10,10);
      }

  }

   //添加一个点到界面上
   public void addPaint(Point point){
       points.add(point);
  }

   //适配模式
   private class MyMouseListener extends MouseAdapter{
       @Override
       public void mousePressed(MouseEvent e) {
           MyFrame frame = (MyFrame) e.getSource();
           //这个我们点击的时候就会在界面上产生一个点
           //这个点就是鼠标的点
           frame.addPaint(new Point(e.getX(),e.getY())); ;

           //每次点击鼠标都要重新画一遍
           frame.repaint(); //刷新
      }
  }
}

窗口监听

package com.yeyue.lesson03;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestWindow {
   public static void main(String[] args) {
       new WindowFrame();
  }
}

class WindowFrame extends Frame{
   public WindowFrame(){
       setBackground(Color.blue);
       setBounds(100,100,200,200);
       setVisible(true);
       //addWindowListener(new MyWindowListener());
       this.addWindowListener(
               new WindowAdapter() {
                   //关闭窗口
                   @Override
                   public void windowClosing(WindowEvent e) {
                       System.out.println("windowClosing");
                       System.exit(0);
                  }

                   //激活窗口
                   @Override
                   public void windowActivated(WindowEvent e) {
                       WindowFrame source = (WindowFrame) e.getSource();
                       source.setTitle("被激活了");
                       System.out.println("windowActivated");
                  }

              }
      );

  }
}

键盘监听

package com.yeyue.lesson03;

import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class TestKeyListener {
   public static void main(String[] args) {
       new KeyFrame();
  }
}

class KeyFrame extends Frame{
   public KeyFrame(){
       setBounds(1,2,300,400);
       setVisible(true);

       this.addKeyListener(new KeyAdapter(){
           //键盘按下
           @Override
           public void keyPressed(KeyEvent e) {
               //获得键盘下的键是哪个,当前的码
               int keyCode = e.getKeyCode(); //不需要记录这个值,直接使用静态属性
               System.out.println(keyCode);
               if(keyCode == KeyEvent.VK_UP){
                   System.out.println("你按下了上键");
              }
               //根据按下不同操作,产生不同的结果
          }
      });
  }
}

GUI编程之AWT的更多相关文章

  1. java-GUI编程之AWT组件

    AWT中常用组件 基本组件 组件名 功能 Button Button Canvas 用于绘图的画布 Checkbox 复选框组件(也可当做单选框组件使用) CheckboxGroup 用于将多个Che ...

  2. pytho GUI编程之Tkinter

    摘录 python核心编程s GUI(Graphical User Interface)图形用户界面. Tcl.Tk和Tkinter Tkinter是python的默认GUI库.它基于Tk工具包,该工 ...

  3. Python GUI编程之Tkinter

    GUI编程Tkinter Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI ...

  4. Python GUI编程之WxPython

    https://en.wikipedia.org/wiki/WxPython 官网: Overview of wxPython: https://wxpython.org/pages/overview ...

  5. C++混合编程之idlcpp教程Python篇(7)

    上一篇在这 C++混合编程之idlcpp教程Python篇(6) 第一篇在这 C++混合编程之idlcpp教程(一) 与PythonTutorial4工程相似,工程PythonTutorial5中,同 ...

  6. C++混合编程之idlcpp教程Lua篇(7)

    上一篇在这 C++混合编程之idlcpp教程Lua篇(6) 第一篇在这 C++混合编程之idlcpp教程(一) 与LuaTutorial4工程相似,工程LuaTutorial5中,同样加入了四个文件: ...

  7. QT核心编程之Qt线程 (c)

    QT核心编程之Qt线程是本节要介绍的内容,QT核心编程我们要分几个部分来介绍,想参考更多内容,请看末尾的编辑推荐进行详细阅读,先来看本篇内容. Qt对线程提供了支持,它引入了一些基本与平台无关的线程类 ...

  8. Linux应用编程之lseek详解

    Linux应用编程之lseek详解 1.lseek函数介绍 (1).文件指针:当我们要对一个文件进行读写时,一定要先打开这个文件,所以我们读写的所有文件都是动态文件.动态文件在内存中的形态就是文件流的 ...

  9. 网络编程之socket

    网络编程之socket socket:在网络编程中的一个基本组件,也称套接字. 一个套接字就是socket模块中的socket类的一个实例. 套接字包括两个: 服务器套接字和客户机套接字 套接字的实例 ...

  10. C++混合编程之idlcpp教程Python篇(9)

    上一篇在这 C++混合编程之idlcpp教程Python篇(8) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相比,工程PythonTutorial7中除了四个文件PythonTu ...

随机推荐

  1. Linux之搭建sftp

    0.查看openssh的版本 ssh -V #使用ssh -V 命令来查看openssh的版本,版本必须大于4.8p1,低于的这个版本需要升级.   1.创建sftp组 groupadd sftp   ...

  2. MySQL底层概述—7.优化原则及慢查询

    大纲 1.Explain概述 2.Explain详解 3.索引优化数据准备 4.索引优化原则详解 5.慢查询设置与测试 6.慢查询SQL优化思路 1.Explain概述 使用Explain关键字可以模 ...

  3. vue 存储cookie 与使用

    安装cookie依赖包 npm i @vueuse/integrations 安装cookie npm i universal-cookie 使用cookie import {useCookies} ...

  4. CryptoHack做题记录

    一.GENERAL 1.ENCODING ASCII ascii = [99, 114, 121, 112, 116, 111, 123, 65, 83, 67, 73, 73, 95, 112, 1 ...

  5. 服务迁移之《mysql数据同步问题》

    我们大概是从2022年十月份开始进行拆分的.面对一百多个服务的时候,真的是无从下手,然后公司突然空降了一个从阿里出来的架构师,然后就带着我们大刀阔斧的整体迁移. 先是服务器购买阿里云的,然后从几个核心 ...

  6. GPU 驱动漏洞:窥探驱动漏洞利用的技术奥秘

    GPU 驱动漏洞:窥探驱动漏洞利用的技术奥秘 本文尝试以 GPU 漏洞为引介绍围绕 GPU 驱动这一攻击面,安全研究人员对内核漏洞利用技术做的一些探索. 背景介绍 目前移动 SOC 平台上由多个硬件模 ...

  7. R数据分析:非劣效性研究设计的统计处理方法,原理和实例

    在我们经常接触的统计模式中,我们是在寻求推翻原假设,证明差异,这种统计模型在传统的临床试验中,在各种统计推断中已经成为默认了.在传统的临床试验中通常会将一种新的治疗方法与标准治疗或安慰剂进行比较,从而 ...

  8. d2js 中实现 memcached 共享 session 的过程

    https://github.com/inshua/d2js/blob/master/WebContent/guide/memcached-session.md 基于 https://github.c ...

  9. (已解决)Public Key Retrieval is not allowed异常

    Public Key Retrieval is not allowed解决方法Public Key Retrieval is not allowed解决方法项目场景:问题描述:原因分析:解决方案:Pu ...

  10. swagger 文件上传以及requestbody参数传递

    swagger用来做普通的API测试很方便,在实际开发过程中,经常会有文件上传,或者通过reuestbody传递数据等方式. 这个时候swagger的配置就有一些特殊了 . swagger reque ...