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