0基础学GUI,先从基础开始1

在这里插入图片描述

1、AWT

1.1 基本介绍

  • 包含很多的类和接口
  • 元素:窗口、按钮、文本框
  • java.awt
    在这里插入图片描述

1.2、Frame

import java.awt.*;

//GUI的第一个界面
public class TestFrame {
    public static void main(String[] args) {
        //1、实例化一个Frame(可在JDK中看源码学习)
        Frame frame = new Frame("我的第一个java图形界面窗口");

        //2、设置可见性
        frame.setVisible(true);

        //3、设置窗口大小
        frame.setSize(800,600);

        //4、设置背景颜色
        frame.setBackground(new Color(255, 55, 55));

        //5、弹出的初始位置
        frame.setLocation(20,20);

        //6、窗口可否改变
        frame.setResizable(false);

    }
}

在这里插入图片描述

  • 展示多个窗口
import java.awt.*;

public class TestFrame2 {
    public static void main(String[] args) {
        //展示多个窗口
        MyFrame mf1 = new MyFrame(10, 10, 200, 200, Color.black);
        MyFrame mf2 = new MyFrame(10, 210, 200, 200, Color.red);
        MyFrame mf3 = new MyFrame(210, 10, 200, 200, Color.green);
        MyFrame mf4 = new MyFrame(210, 210, 200, 200, Color.yellow);
    }
}

class MyFrame extends Frame{
    //设置一个计数器
    static int id = 0;
    public MyFrame(int x, int y, int w, int h,Color color){

        super("Myframe" + (++id));

        setBounds(x,y,w,h);
        setBackground(color);
        setResizable(false);
        setVisible(true);
    }
}

在这里插入图片描述

1.3、Panel

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

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

        //开始布局
        Panel panel = new Panel();

        //设置布局
        frame.setLayout(null);
        frame.setBounds(20,20,400,400);
        frame.setBackground(new Color(218, 61, 49));

        //panel设置
        panel.setBounds(40,40,100,100);
        panel.setBackground(Color.darkGray);

        //加入面板
        frame.add(panel);

        //显示
        frame.setVisible(true);

        //如何关闭窗口?
        //监听事件,适配器模式,选择windowsClosing
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                //结束程序
                System.exit(0);
            }
        });
    }
}

在这里插入图片描述

1.4、布局管理器

  • 流式布局
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

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

        //组件-按钮
        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);

        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}
  • 东西南北中
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

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

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

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

        frame.setSize(200,200);
        frame.setVisible(true);

        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}
  • 表格布局
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

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

        Button btn1 = new Button("btn1");
        Button btn2 = new Button("btn2");
        Button btn3 = new Button("btn3");
        Button btn4 = new Button("btn4");
        Button btn5 = new Button("btn5");
        Button btn6 = new Button("btn6");

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

        frame.add(btn1);
        frame.add(btn2);
        frame.add(btn3);
        frame.add(btn4);
        frame.add(btn5);
        frame.add(btn6);

//        frame.setSize(200,200);
        frame.pack();//自动填充合适的大小
        frame.setVisible(true);

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

在这里插入图片描述

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

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

        frame.setSize(400,300);
        frame.setLocation(300,400);
        frame.setBackground(Color.BLACK);
        frame.setVisible(true);

        //先上下分2框
        frame.setLayout(new GridLayout(2,1));

        //4个面板
        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-3"),BorderLayout.EAST);
        p3.add(new Button("West-3"),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);
            }
        });


    }
}

1.5、事件监听

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 TestAction {
    public static void main(String[] args) {
        //按下按钮,触发事件
        Frame frame = new Frame();
        Button button = new Button();
        //实例化一个监听事件
        MyActionListener myActionListener = new MyActionListener();
        //按钮添加监听事件
        button.addActionListener(myActionListener);

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

        //关闭窗口
        windowClose(frame);

        frame.setVisible(true);

    }

    //关闭窗口的事件
    public static void windowClose(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");
    }
}
  • 多个按钮共享一个事件
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 TestActionTwo {
    public static void main(String[] args) {
        //两个按钮,实现同一个监听
        //开始、停止
        Frame frame = new Frame();
        Button button1 = new Button("start");
        Button button2 = new Button("stop");

        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);

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

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

1.6、输入框TextField监听

  • 1、建立main方法psvm,新建一个MyFrame方法

  • 2、新建MyFrame类并继承Frame类

    • 3、新建公众public的MyFrame()方法

      • 4、实例化一个文本框对象TextField:testField

      • 5、添加add,值为testField

      • 10、实例化一个MyActionListener监听对象:myActionListener

      • 11、testField添加行动监听方法.addActionListener,值为myActionListener

      • 17、testField设置回声字符.setEchoChar,输入时看到都是*,系统可正常获取

      • 12、打包pack()

      • 13、设置显示setVisible,值为真true

      • 14、添加窗口监听addWindowListener,值为一个新的窗口适配器WindowAdapter

        • 15、重写窗口关闭windowClosing方法

          • 16、系统System的退出.exit,值为0
  • 6、新建一个MyActionListener类继承ActionListener接口

    • 7、重写动作执行方法actionPerformed
      • 8、获得一些资源的方法e.getsoure(),并强制转化为对话框(TextField),在赋值给对话框类TextField的field
      • 9、field获得输入框文本的方法.getText,并打印输出sout
      • 18、field设置文本.setTest,值空,实现回车清空的效果
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 TestText01 {
    public static void main(String[] args) {
        //main方法主要功能就是启动
        new MyFrame();
    }
}

class MyFrame extends Frame{
    public MyFrame(){
        //实例化一个文本框
        TextField textField = new TextField();
        add(textField);

        //输入完成回车后,触发这个输入框事件
        MyActionListener2 myActionListener2 = new MyActionListener2();
        //监听文本框中输入的文字
        textField.addActionListener(myActionListener2);

        //设置回声字符,输入时看到都是*,系统可正常获取
        textField.setEchoChar('*');

        pack();
        setVisible(true);

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

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

1.7、简易计算器

第一次尝试:面向过程
  • 1、建立main方法
    • 13、新建计算器方法Calculator()
  • 2、建立计算器类Calculator,继承Frame
    • 3、新建计算器方法Calculator()
      • 6、新建3个文本框TextField:num1、num2、num3,值为字符数分别为:10,10,20
      • 7、新建1个按钮Button:button,值为“=”
      • 14、button添加行为监听方法.addActionListener(),值为新建我的计算器监听方法MyCalculatorListener(),值为num1、num2、num3
      • 8、新建1个标签Label:label,值为“+”
      • 9、设置布局setLayout,值为新建一个流布局FlowLayout
      • 10、依次加入add:num1,label、num2、button、num3
      • 11、打包pack()
      • 12、设置显示setVisible,值为真true
      • 21、加入窗口监听addWindowListener()并实现系统关闭(详解省略,请看上文)
  • 4、建立计算器监听类MyCalulatorListener,继承动作监听接口ActionListener
    • 15、定义私有变量private、类型为文本框TextField的三个变量:num1、num2、num3
    • 16、定义共有public、我的计算机监听方法MyCalculatorListener(),值为文本框类型的TextField:num1、num2、num3
      • 17、输入的num1、num2、num3的值赋值给类中的三个私有变量this.:num1、num2、num3
    • 5、重写动作执行方法actionPerformed(),值为行为动作类ActionEven:e
      • 18、获得加数和被加数:变量num1、2先获取文本方法.getText(),在通过转化int型方法Integer.parseInt()转化为int型,最后赋值给int型的变量n*
      • 19、加法运算后返回第三个框:变量num3设置文本方法.setText(),值为n1+n2的和加上+一个空字符“”转化的String类型
      • 20、清除连个文本框的值:变量1、2设置文本方法.setText(),值为空“”
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 TestCalc {
    public static void main(String[] args) {
        new Calculator();
    }
}

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

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

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

        //布局:流式布局
        setLayout(new FlowLayout());

        //添加
        add(num1);
        add(label);
        add(num2);
        add(button);
        add(num3);

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

    }
}

//监听器类
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) {
        //获得加数和被加数
        int n1 = Integer.parseInt(num1.getText());
        int n2 = Integer.parseInt(num2.getText());

        //加法运算后返回到第三个框
        num3.setText("" + (n1 + n2));

        //清除前两个框的值
        num1.setText("");
        num2.setText("");
    }
}
第二次优化:组合,面向对象
  • 1、建立main方法

    • 21、新建计算器方法Calculator2().loadFrame
  • 2、建立计算器类Calculator2,继承Frame

    • 3、属性:新建文本框类的三个变量num1、num2、num3

    • 4、新建公众public、无返回值void、载入框架方法loadFrame()

      • 5、新建3个文本框TextField,值为字符数分别为:10,10,20,赋值为:num1、num2、num3

      • 新建1个标签Label:label,值为“+”

      • 6、新建1个按钮Button:button,值为“=”

      • 7、button添加行为监听方法.addActionListener(),值为新建我的计算器监听方法MyCalculatorListener(),值为this

      • 8、设置布局setLayout,值为新建一个流布局FlowLayout

      • 9、依次加入add:num1,label、num2、button、num3

      • 10、打包pack()

      • 11、设置显示setVisible,值为真true

      • 12、加入窗口监听addWindowListener()并实现系统关闭(详解省略,请看上文)

  • 13、建立计算器监听类MyCalulatorListener,继承动作监听接口ActionListener

    • 14、在一个类中组合另一个类,获取计算器:Calculatro2类型calculator2,并赋值其为null
    • 15、定义共有public、我的计算机监听方法MyCalculatorListener(),值为Calculator类型的Calculator
      • 16、输入的Calculator赋值给this.calculator
    • 5、重写动作执行方法actionPerformed(),值为行为动作类ActionEven:e
      • 18、获得加数和被加数:calculator2.num1、2先获取文本方法.getText(),在通过转化int型方法Integer.parseInt()转化为int型,最后赋值给int型的变量n1、n2
      • 19、加法运算后返回第三个框:calculator.num3设置文本方法.setText(),值为n1+n2的和加上+一个空字符“”转化的String类型
      • 20、清除连个文本框的值:calculator.num1、2设置文本方法.setText(),值为空“”
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 TestCalculat {
    public static void main(String[] args) {
        new Calculator2().loadFrame();
    }
}

//计算器类
class Calculator2 extends Frame{
    //属性
    TextField num1,num2,num3;

    //方法
    public void loadFrame(){
        //主键:3个文本框,1个标签,1个按钮
        num1 = new TextField(10);     //字符数
        num2 = new TextField(10);     //字符数
        num3 = new TextField(20);     //字符数
        Label label = new Label("+");
        Button button = new Button("=");

        //监听器
        button.addActionListener(new MyCalculatorListener2(this));

        //布局:流式布局
        setLayout(new FlowLayout());
        //添加
        add(num1);
        add(label);
        add(num2);
        add(button);
        add(num3);

        //打包、显示
        pack();
        setVisible(true);

        //窗口关闭
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}

//监听器类
class MyCalculatorListener2 implements ActionListener{
    //在一个类中组合另外一个类,获取计算器
    Calculator2 calculator2 = null;

    public MyCalculatorListener2(Calculator2 calculator2){
        this.calculator2 = calculator2;
    }

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

        //加法运算后返回到第三个框
        calculator2.num3.setText("" + (n1 + n2));

        //清除前两个框的值
        calculator2.num1.setText("");
        calculator2.num2.setText("");
    }
}
第三次优化:内部类
  • 1、建立main方法psvm

    • 18、新建计算器方法Calculator2().loadFrame
  • 2、建立计算器类Calculator3,继承Frame

    • 3、属性:新建文本框类的三个变量num1、num2、num3

    • 4、新建公众public、无返回值void、载入框架方法loadFrame()

      • 5、新建3个文本框TextField,值为字符数分别为:10,10,20,赋值为:num1、num2、num3

      • 新建1个标签Label:label,值为“+”

      • 6、新建1个按钮Button:button,值为“=”

      • 7、button添加行为监听方法.addActionListener(),值为新建我的计算器监听方法MyCalculatorListener(),值为this

      • 8、设置布局setLayout,值为新建一个流布局FlowLayout

      • 9、依次加入add:num1,label、num2、button、num3

      • 10、打包pack()

      • 11、设置显示setVisible,值为真true

      • 12、加入窗口监听addWindowListener()并实现系统关闭(详解省略,请看上文)

      • 13、建立计算器监听类MyCalulatorListener,继承动作监听接口ActionListener

      • 14、重写动作执行方法actionPerformed(),值为行为动作类ActionEven:e

      • 15、获得加数和被加数:calculator2.num1、2先获取文本方法.getText(),在通过转化int型方法Integer.parseInt()转化为int型,最后赋值给int型的变量n1、n2

      • 16、加法运算后返回第三个框:calculator.num3设置文本方法.setText(),值为n1+n2的和加上+一个空字符“”转化的String类型

      • 17、清除连个文本框的值:calculator.num1、2设置文本方法.setText(),值为空“”

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 TestCalculator {
    public static void main(String[] args) {
        new Calculator3().loadFrame();
    }
}

//计算器类
class Calculator3 extends Frame{
    //属性
    TextField num1,num2,num3;

    //方法
    public void loadFrame(){
        //主键:3个文本框,1个标签,1个按钮
        num1 = new TextField(10);     //字符数
        num2 = new TextField(10);     //字符数
        num3 = new TextField(20);     //字符数
        Label label = new Label("+");
        Button button = new Button("=");

        //监听器
        button.addActionListener(new MyCalculatorListener3());

        //布局:流式布局
        setLayout(new FlowLayout());
        //添加
        add(num1);
        add(label);
        add(num2);
        add(button);
        add(num3);

        //打包、显示
        pack();
        setVisible(true);

        //窗口关闭
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

    }

    //监听器类
    private class MyCalculatorListener3 implements ActionListener{

        @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("");
        }
    }
}

1.8、画笔

  • 1、建立main方法psvm
    • 18、新建画笔方法MyPaint().loadFrame()
  • 2、建立画笔类MyPaint,继承Frame
    • 3、新建公众public、无返回值void、载入框架方法loadFrame()
      • 设置边界setBounds,值为20,20处实现600*600的框架
      • 设置可见方法,值为真(详情省略)
    • 重写画笔:公众的public、无返回值void、画笔方法paint(),值为Graphics类的g
      • 设置颜色方法.setcolor(),值为颜色类的红色red
      • 绘制空心圆方法.drawOval(),值为50,50处绘制100*100的空心圆
      • 绘制实心圆方法.fillOval(),值为150,150处绘制100*100的实心圆
      • 设置颜色方法.setcolor(),值为颜色类的黄色yellow
      • 绘制实心长方形方法.fillRect(),值为200,20处绘制200*100的实心长方形
      • 最后,当画笔用完后,将他的颜色还原成默认黑色:设置颜色方法.setcolor(),值为颜色类的黑色black
import java.awt.*;

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

class MyPaint extends Frame{
    public void loadFrame(){
        setBounds(20,20,600,600);
        setVisible(true);
    }
    //画笔
    @Override
    public void paint(Graphics g){
        g.setColor(Color.red);      //选择颜色:红
        g.drawOval(50,50,100,100);      //绘制100*100的空心圆
        g.fillOval(150,150,100,100);        //绘制100*100的实心圆

        g.setColor(Color.yellow);       //设置颜色:黄
        g.fillRect(200,20,200,100);     //绘制200*100的实心长方形

        //养成习惯,画笔用完,将他还原成最初的颜色
        g.setColor(Color.black);
    }
}

1.9、鼠标监听

在这里插入图片描述

  • 1、建立main方法psvm

    • 18、新建框架方法MyFram(),值为画图
  • 2、建立我的框架类MyFrame,继承Frame

    • 11、属性队列ArrayList一个点points

    • 3、新建公众public、我的框架方法MyFrame(),值为String类型的标题title

      • 4、super(),值为title

      • 12、设置边界方法setBounds(),值为200,200,长度400,宽度300的长方形

      • 13、存鼠标点击的点:新建队列,赋值到点points

      • 22、设置可见方法setVisible(),值为真true

      • 5、添加鼠标监听:this.addMouseListener(),值为新建一个我的鼠标监听方法MyMouseListener()

    • 6、重写公众的public,无返回值void,画笔方法paint(),值为Graphics类型的g

      • 14、将点points的迭代方法iterator()赋值给迭代器类型Iterator的iterator

      • 15、while循环,值为如果iterator后面还有

        • 16、iterator的下面next()赋值给Point类型的point

        • 17、设置颜色方法g.setColor(),值为蓝色

        • 18、设置实心圆方法g.fillOval(),值为point.x,point.y,宽度10,高度10

    • 19、添加一个点到界面上:公众的public、无返回值void、添加点方法addPaint(),值为Point类型的point

      • 20、点points添加add(),值为point
    • 7、私有的private、我的鼠标监听类MyMouseListener,继承鼠标适配器MouseAdapter

      • 8、重写鼠标点击方法:公共的public、无返回值viod、鼠标点击方法mousePressed(),值为鼠标事件类MouseEven的e
        • 9、获得资源e.getSource(),强制转换(MyFrame),并赋值于MyFrame类的myFrame
        • 10、新建一个Point(),值为e.getX(),e.getY()
        • 21、我的框架myFrame,添加点的方法.addpaint(),值为Point()
        • 23、设置重画.repaint(),让每次点击鼠标都需要重画一次,相当于是刷新
package cn.wisdex.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,300);

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

        setVisible(true);

        //添加鼠标
        this.addMouseListener(new MyMouseListener());
    }

    @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 myFrame = (MyFrame) e.getSource();
            //确定鼠标的点
            myFrame.addPaint(new Point(e.getX(),e.getY()));

            //每次点击鼠标都需要重画一遍,相当于是刷新
            myFrame.repaint();
        }
    }
}

1.10、窗口监听

在这里插入图片描述

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.red);
        setBounds(100,100,200,200);
        setVisible(true);
        
        addWindowListener(new MyWindowListener());
    }

    //内部类
    class MyWindowListener extends WindowAdapter{
        @Override
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    }
}
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.red);
        setBounds(100,100,200,200);
        setVisible(true);

        this.addWindowListener(
                //匿名内部类
                new WindowAdapter(){
                    @Override
                    public void windowClosing(WindowEvent e) {
                        super.windowClosing(e);
                    }
                }
        );
    }

1.11 键盘监听

在这里插入图片描述

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(){
        setBackground(Color.red);
        setBounds(20,20,400,300);
        setVisible(true);

        this.addKeyListener(new KeyAdapter() {      
            @Override
            public void keyPressed(KeyEvent e) {
                int keycode = e.getKeyCode();
                System.out.println(keycode);
                if (keycode == KeyEvent.VK_D){
                    System.out.println("自己人");
                }
            }
        });
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值