事件处理三个基本要素
(1)事件(2)事件源(3)监听器
事件处理的三个过程
(1)监听器的注册,调用组件的addXXXListener方法进行注册
(2)定义监听器类,实现与XXXEvent对应的XXXListener接口
(3)监听器类的实现,实现接口中的方法(public actionPerformed(ActionEvent e))
事件处理的两种方法,第一种是本类做监听器,另一种是其他类做监听器。
方法一:本类做监听器类(实现一个简单的计算器)
代码实现
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class jia_GUI_this implements ActionListener{
private JFrame frame;
private JLabel label;
private JButton button;
private JTextField text1,text2,text3;
jia_GUI_this(){
frame = new JFrame("用本类做监听器类");
label = new JLabel("+");
button = new JButton("=");
text1 = new JTextField(20);
text2 = new JTextField(20);
text3 = new JTextField(20);
frame.setSize(800,80);
frame.setLayout(new FlowLayout());
frame.add(text1);
frame.add(label);
frame.add(text2);
frame.add(button);
frame.add(text3);
frame.setResizable(true);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
button.addActionListener(this);//本类做监听器类
}
//实现接口方法
public void actionPerformed(ActionEvent e) {
int add1 = Integer.parseInt(text1.getText().trim());//读取,转换为数字
int add2 = Integer.parseInt(text2.getText().trim());//读取,转换为数字
int sum = add1 + add2;
text3.setText(Integer.toString(sum));
}
}
public class jia_this {
public static void main(String[] args) {
jia_GUI_this x = new jia_GUI_this();
}
}
结果如下
输入两个数字,点击等于号按钮即可实现加法。
实操步骤
(1)component.addActionListener(this)注册监听器
(2)public void actionPerformed(ActionEvent e)实现抽象方法
方法二:自定义类做监听器类(实现一个简单的计算器)
代码实现
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class jia_GUI_that {
private JFrame frame;
private JLabel label;
private JButton button;
private JTextField text1,text2,text3;
jia_GUI_that(){
frame = new JFrame("用本类做监听器类");
label = new JLabel("+");
button = new JButton("=");
text1 = new JTextField(20);
text2 = new JTextField(20);
text3 = new JTextField(20);
frame.setSize(800,80);
frame.setLayout(new FlowLayout());
frame.add(text1);
frame.add(label);
frame.add(text2);
frame.add(button);
frame.add(text3);
frame.setResizable(true);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
button.addActionListener(new ButtonEvent(this));//其他类做监听器类,构造对象
}
public void actionPerformed(ActionEvent e) {
int add1 = Integer.parseInt(text1.getText().trim());
int add2 = Integer.parseInt(text2.getText().trim());
int sum = add1 + add2;
text3.setText(Integer.toString(sum));
}
public JTextField gettext1() {
return this.text1;
}
public JTextField gettext2() {
return this.text2;
}
public JTextField settext3() {
return this.text3;
}
}
class ButtonEvent implements ActionListener{
jia_GUI_that evd;
public ButtonEvent (jia_GUI_that e) {
this.evd = e;
}
public void actionPerformed(ActionEvent e) {
int add1 = Integer.parseInt(evd.gettext1().getText().trim());
int add2 = Integer.parseInt(evd.gettext2().getText().trim());
int sum = add1 + add2;
evd.settext3().setText(Integer.toString(sum));
}
}
public class jia_that {
public static void main(String[] args) {
jia_GUI_that a = new jia_GUI_that();
}
}
结果如下
输入两个数字,点击等于号按钮即可实现加法。
实操步骤
(1)其他类做监听器类需要自己定义一个类,继承ActionListener
class ButtonEvent implements ActionListener
(2)构造方法,GUI类传回(this类)
component.addActionListener(new ButtonEvent(this));
然后监听器类构造方法
this.evd=e;
接下来的e就拥有了GUI类的全部属性,只不过需要get和set方法
(3)实现抽象方法
public void actionPerformed(ActionEvent e)