GUI笔记二

GUI学习之AWT

1.事件监听

事件监听:当某个事情发生的时候,干什么?

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

/**
 * @author wqiushi
 * @version 1.0
 * @date 2020/12/22 22:21
 */
public class TestActionEvent {
    
    

    public static void main(String[] args) {
    
    
        //创建一个窗口
        Frame frame = new Frame("事件监听");

        //设置窗口大小和位置
        frame.setBounds(200, 200, 500, 500);
        //设置窗口的背景
        frame.setBackground(Color.BLUE);
        //设置窗口可见性
        frame.setVisible(true);

        //创建一个按钮
        Button button = new Button("button1");

        //给按钮加上一个事件监听
        button.addActionListener(new MyActionListener());

        //将button添加到窗口中去
        frame.add(button);
        closeWindow(frame);

    }

    private static void closeWindow(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("www");
    }
}

在这里插入图片描述

点击button1就会在命令行打印出www。

多个按钮共享一个监听

package day01;

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

/**
 * @author wqiushi
 * @version 1.0
 * @date 2020/12/23 11:24
 */
public class TestActionTwo {
    
    
    public static void main(String[] args) {
    
    
        //新建一个窗口
        Frame frame = new Frame();

        //设置窗口的大小和位置
        frame.setBounds(200, 200, 500, 500);

        //设置窗口背景颜色
        frame.setBackground(Color.blue);

        //新建两个button
        Button button1 = new Button("start");
        Button button2 = new Button("end");

        //给button1显示设置ActionCommand
        button1.setActionCommand("send message");
        //给button2显示设置ActionCommand
        button2.setActionCommand("end message");

        //new一个监听
        MyMonitor myMonitor = new MyMonitor();

        //给button1,button2设置监听
        button1.addActionListener(myMonitor);
        button2.addActionListener(myMonitor);

        //将按钮添加到窗口中去
        frame.add(button1, BorderLayout.NORTH);
        frame.add(button2, BorderLayout.SOUTH);

        //设置窗口可见性
        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) {
    
    
        System.out.println(e.getActionCommand());
    }
}

在这里插入图片描述

点击start按钮,命令行会打印出send message,点击end按钮,命令行打印出end message。

2 .输入框TextField监听

package day02;

import java.awt.*;
import java.awt.event.*;

/**
 * @author wqiushi
 * @version 1.0
 * @date 2020/12/23 15:30
 */
public class TestTextField {
    
    
    public static void main(String[] args) {
    
    
        //只写启动代码
        new MyFrame();
    }
}

class MyFrame extends Frame {
    
    

    public MyFrame() {
    
    
        //new一个textField
        TextField textField = new TextField();
        //将textField添加到窗口中去
        add(textField);

        //监听文本框输入的文字
        MyActionListener myActionListener = new MyActionListener();
        textField.addActionListener(myActionListener);

        //设置编码
        textField.setEchoChar('*');
        //设置可见性
        setVisible(true);


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

class MyActionListener implements ActionListener {
    
    

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

3.简易计算器,组合+内部类回顾复习

oop原则:组合大于继承。

package day02;

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

/**
 * @author wqiushi
 * @version 1.0
 * @date 2020/12/23 16:04
 */
public class TextCac {
    
    
    public static void main(String[] args) {
    
    
        //启动代码
        new MyCalculator();
    }
}

class MyCalculator extends Frame {
    
    
    public MyCalculator() {
    
    
        //设置窗口大小和位置
        setBounds(200, 200, 500, 500);
        setLayout(new FlowLayout());

        //new3个TextFiled
        TextField textField1 = new TextField(10);
        TextField textField2 = new TextField(10);
        TextField textField3 = new TextField(20);


        //new一个label
        Label label = new Label("+", Label.CENTER);

        //new一个button
        Button button = new Button("=");

        //设置按钮监听
        button.addActionListener(new MyActionListener2(textField1, textField2, textField3));

        //将TextFiled,label,button添加到计算器窗口中去
        add(textField1);
        add(label);
        add(textField2);
        add(button);
        add(textField3);


        //设置可见性
        setVisible(true);

        //设置计算器窗口监听,可以关闭窗口
        addWindowListener(new WindowAdapter() {
    
    
            @Override
            public void windowClosing(WindowEvent e) {
    
    
                System.exit(0);
            }
        });
    }
}

class MyActionListener2 implements ActionListener {
    
    
    //成员变量
    private TextField num1, num2, num3;

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

    @Override
    public void actionPerformed(ActionEvent e) {
    
    
        //获得num1和num2的值,即加数和被加数
        String num1 = this.num1.getText();
        String num2 = this.num2.getText();

        //将字符串转为int
        int num11 = Integer.parseInt(num1);
        int num22 = Integer.parseInt(num2);

        //计算结果
        int num33 = num11+num22;

        //将结果显示在第3个文本框中
        this.num3.setText(""+num33);

        //清空前两个文本框
        this.num1.setText("");
        this.num2.setText("");

    }
}

内部类

  • 更好的包装
  • 内部类最大的好处,就是可以畅通无阻的访问外部类的属性和方法

4.画笔

package day02;

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

/**
 * @author wqiushi
 * @version 1.0
 * @date 2020/12/23 16:58
 */
public class TestPaint {
    
    
    public static void main(String[] args) {
    
    
        //启动代码
        new MyPaint().loadFrame();
    }
}

class MyPaint extends Frame {
    
    
    public void loadFrame() {
    
    
        setBounds(200, 200, 500, 500);
        setVisible(true);

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

    @Override
    public void paint(Graphics g) {
    
    
        g.setColor(Color.BLUE);
        g.drawOval(50, 50, 100, 100);
    }
}

在这里插入图片描述

5.鼠标监听

package day02;

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 MyFrame2("画点");

    }
}

class MyFrame2 extends Frame {
    
    
    //创建一个ArrayList用来存储画点
    private ArrayList points;

    public MyFrame2(String title) {
    
    
        //窗口名称
        super(title);
        //设置窗口大小和位置
        setBounds(200, 200, 500, 500);
        //设置可见性
        setVisible(true);

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

        //设置鼠标监听器
        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 addPoint(Point point) {
    
    
        points.add(point);
    }

    //适配器模式,监听鼠标
    class MyMouseListener extends MouseAdapter {
    
    
        //鼠标 按下,弹起,按住不放

        @Override
        public void mousePressed(MouseEvent e) {
    
    
            MyFrame2 frame = (MyFrame2) e.getSource();
            //点击的时候,就会在界面上产生一个点
            //这个点就是鼠标的点
            frame.addPoint(new Point(e.getX(), e.getY()));

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

思路如下:
在这里插入图片描述

6.窗口监听

package day02;

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

public class TestWindowListener {
    
    
    public static void main(String[] args) {
    
    
        //启动代码
        new MyWindowListener2();

    }
}

class MyWindowListener2 extends Frame {
    
    
    public MyWindowListener2() {
    
    
        super("窗口监听测试");
        setBounds(200, 200, 500, 500);
        setVisible(true);

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

            @Override
            public void windowActivated(WindowEvent e) {
    
    
                System.out.println("windowActivated");
            }
        });
    }
}

7.键盘监听

package day02;

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


public class KeyboardListener {
    
    
    public static void main(String[] args) {
    
    
        //启动代码
        new MyKeyboardListener();
    }
}

class MyKeyboardListener extends Frame {
    
    
    public MyKeyboardListener() {
    
    
        super("键盘监听测试");
        setBounds(200, 200, 500, 500);
        setVisible(true);

        //设置键盘监听,匿名内部类
        addKeyListener(new KeyAdapter() {
    
    
            @Override
            public void keyPressed(KeyEvent e) {
    
    
                //获得按键是哪一个
                char keyChar = e.getKeyChar();
                System.out.println(keyChar);
            }
        });

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

    }
}

参考:https://www.bilibili.com/video/BV1DJ411B75F?p=13

猜你喜欢

转载自blog.csdn.net/wqs12345612/article/details/111625502
GUI