8.1 事件处理基础
事件:用户进行某种输入操作时,触发的效果。比如点击鼠标,按下键盘按键。
事件过程(VB):事件与过程之间有显著的关系。把触发效果(固定,语言写死)对应的过程放在事件编写的代码中。
事件队列(C):代码不断检查事件队列,查询到有事件发生时,进行处理。
Java的事件触发过程:
Java中所有事件对象派生于EventObject
ActionEvent:按钮事件
WindowEvent:窗口事件
8.1.1 按钮点击事件
public class Main {public static void main(String[] args) {
Main solution = new Main();
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
ButtonFrame b = new ButtonFrame();
b.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
b.setVisible(true);
}
});
}
}
class ButtonFrame extends JFrame{
public static final int W = 300;
public static final int H = 200;
private JPanel buttonPanel;
public ButtonFrame(){
setTitle("ButtonTest");
setSize(W,H);
Toolkit t = Toolkit.getDefaultToolkit();
Dimension d = t.getScreenSize();
setLocation(((int)d.getWidth()-W)/2,((int)d.getHeight()-H)/2);
JButton yellowButton = new JButton("Yellow");
JButton blueButton = new JButton("Blue");
JButton redButton = new JButton("Red");
buttonPanel = new JPanel();
buttonPanel.add(yellowButton);
buttonPanel.add(blueButton);
buttonPanel.add(redButton);
add(buttonPanel);
ColorAction yellowAction = new ColorAction(Color.YELLOW);
ColorAction blueAction = new ColorAction(Color.BLUE);
ColorAction redAction = new ColorAction(Color.RED);
yellowButton.addActionListener(yellowAction);
blueButton.addActionListener(blueAction);
redButton.addActionListener(redAction);
}
private class ColorAction implements ActionListener{
Color bgColor;
public ColorAction(Color c){
bgColor = c;
}
public void actionPerformed(ActionEvent event){
buttonPanel.setBackground(bgColor);
}
}
}
8.1.2 建议使用内部类
这里其实作者混淆了代码简单和执行速度快的概念,我觉得不足为凭。但确实写事件的时候,大多数还是习惯用内部类,通常来说用静态内部类更好一些。但只做小工具的场景下,其实内部类影响有限,可以按作者的来。
import javax.swing.*;import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Main solution = new Main();
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
ButtonFrame b = new ButtonFrame();
b.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
b.setVisible(true);
}
});
}
}
class ButtonFrame extends JFrame implements ActionListener{
public static final int W = 300;
public static final int H = 200;
private JPanel buttonPanel;
Map<JButton,Color> m = new HashMap<>();
public ButtonFrame(){
setTitle("ButtonTest");
setSize(W,H);
Toolkit t = Toolkit.getDefaultToolkit();
Dimension d = t.getScreenSize();
setLocation(((int)d.getWidth()-W)/2,((int)d.getHeight()-H)/2);
JButton yellowButton = new JButton("Yellow");
JButton blueButton = new JButton("Blue");
JButton redButton = new JButton("Red");
buttonPanel = new JPanel();
buttonPanel.add(yellowButton);
buttonPanel.add(blueButton);
buttonPanel.add(redButton);
add(buttonPanel);
yellowButton.addActionListener(this);
blueButton.addActionListener(this);
redButton.addActionListener(this);
m.put(yellowButton,Color.YELLOW);
m.put(blueButton,Color.BLUE);
m.put(redButton,Color.RED);
}
public void actionPerformed(ActionEvent event){
buttonPanel.setBackground(m.getOrDefault(event.getSource(),Color.YELLOW));
}
}
系列内容:
《Java 核心技术 卷1》 笔记:第一章 Java程序设计概述
《Java 核心技术 卷1》 笔记:第二章 Java程序设计环境
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(1)
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(2)
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(3)
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(4)
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(5)
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(6)
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(7)大数处理、数组、多维数组、控制台传参
《Java 核心技术 卷1》 笔记 第四章:类与对象
《Java 核心技术 卷1》 笔记 第四章:类与对象(2) GregorianCalendar 与 类的基本组成
《Java 核心技术 卷1》 笔记 第四章:类与对象(3) 构造器全局私有方法
《Java 核心技术 卷1》 笔记 第四章:类与对象(4) 静态字段+静态方法+工厂方法
《Java 核心技术 卷1》 笔记 第四章:类与对象(5) 形参与实参 构造器的默认值与默认构造
《Java 核心技术 卷1》 笔记 第四章:类与对象(6) 构造器调用与初始化块
《Java 核心技术 卷1》 笔记 第四章:类与对象(7) 注释、JavaDoc与类设计
《Java 核心技术 卷1》 笔记 第五章 继承
《Java 核心技术 卷1》 笔记 第五章 继承(2)
《Java 核心技术 卷1》 笔记 第五章 继承(3)
《Java 核心技术 卷1》 笔记 第五章 继承(4)equals方法
《Java 核心技术 卷1》 笔记 第五章 继承(5)hashCode 与 toString
《Java 核心技术 卷1》 笔记 第五章 继承(6) 泛型
《Java 核心技术 卷1》 笔记 第五章 继承(7) 包装类和可变数组
《Java 核心技术 卷1》 笔记 第五章 继承(8) 枚举类与类反射
《Java 核心技术 卷1》 笔记 第五章 继承(9) 异常捕获与反射运用
《Java 核心技术 卷1》 笔记 第五章 继承(10)反射
《Java 核心技术 卷1》 笔记 第五章 继承(11)反射泛型数组+方法指针+类设计技巧
《Java 核心技术 卷1》 笔记 第六章 接口和内部类
《Java 核心技术 卷1》 笔记 第六章 接口和内部类(2)
《Java 核心技术 卷1》 笔记 第六章 接口和内部类(3) 接口回调与内部类
《Java 核心技术 卷1》 笔记 第六章 接口和内部类(4) 局部内部类和局部内部类引用方法变量分析
《Java 核心技术 卷1》 笔记 第六章 接口和内部类(5) 匿名内部类和静态内部类
《Java 核心技术 卷1》 笔记 第六章 接口和内部类(6) 静态代理
《Java 核心技术 卷1》 笔记 第六章 接口和内部类(7) 动态代理
《Java 核心技术 卷1》 笔记 第七章 图形程序设计
《Java 核心技术 卷1》 笔记 第七章 图形程序设计(2)
《Java 核心技术 卷1》 笔记 第七章 图形程序设计(3)
《Java 核心技术 卷1》 笔记 第七章 图形程序设计(4)
《Java 核心技术 卷1》 笔记 第七章 图形程序设计(5)
《Java 核心技术 卷1》 笔记 第七章 图形程序设计(6) 图像平铺
喜欢的话,点个赞吧~!平时做题,以及笔记内容将更新到公众号。
关注公众号,互相学习:钰娘娘知识汇总