GUI 事件驱动的编程模式
程序员文章站
2022-05-28 11:34:49
...
摘要
事件处理的编程步骤
1.确定事件源和要处理的事件
2.创建监听类
3.为事件源注册监听对象
- 实例化监听对象
- 指定一个监听对象
用组件在窗口上输入和显示信息
例
文本框JTextField 文本域 JTextArea
- getText():返回文本框(域)中输入的内容(String)
- setText(String):设置文本框(域)中显示的内容
- append(String):在文本域中追加要显示的内容
鼠标事件
事件适配器(适配器模式 简化事件监听类)
- 事件适配器是实现的监听器接口的类
- 为该接口中的每一个方法都实现空实现
- 当需要创建监听器类时
- 从事件适配器中继承,只重写需要的方法
- 每个包含多个方法的监听器接口都会对应一个适配器(XXXXXXAdapter)
例子 (简单计算器的实现)
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.AncestorListener;
public class TaskCalculator6618 extends JFrame {
private JTextField txtResult;
private JButton btnClear;
private JPanel p1, p2;
public TaskCalculator6618() {
super("6618计算器");
initUIXXXX();
// this.setSize(230, 230);
// this.setLocation(200, 100);
this.setBounds(400, 300, 400, 300);
// 窗口关闭
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setVisible(true);
// 设置窗口大小不可改变
this.setResizable(false);
}
private void initUIXXXX() {
p1 = new JPanel();
btnClear = new JButton("清空");
txtResult = new JTextField(13);
p1.add(txtResult);
p1.add(btnClear);
this.add(p1, BorderLayout.NORTH);
p2 = new JPanel(new GridLayout(4, 4));
ClickButton click = new ClickButton();
// 定义一个字符串,存储计算器中按钮上的文字,文字的排列与排列顺序一致
// 目的:通过循环语句向窗体添加按钮
String name = "789+456-123*0.=/";
for (int i = 0; i < name.length(); i++) {
JButton button = new JButton("" + name.charAt(i));
button.addActionListener(click);
p2.add(button);
// p2.add(new JButton("" + name.charAt(i)));
}
// 添加监听对象
this.btnClear.addActionListener(click);
this.add(p2, BorderLayout.CENTER);
}
class ClickButton implements ActionListener {
// 第一次输入
double number1 = 0.0d;
// 第二次
double number2 = 0.0d;
// 结果
double result = 0.0d;
// 显示信息
String number = "";
// 运算符
String operator = "+";
public void actionPerformed(ActionEvent e) {
String Num = e.getActionCommand();
if (Num.equals("清空")) {
// 文本框重置
number = "";
txtResult.setText("");
}
//按下乘除默认number2为1.0
else if (Num.equals("*") || Num.equals("/")) {
this.number2 = 1.0D;
}
else if (Num.equals("-") || Num.equals("+") || Num.equals("*") || Num.equals("/")) {
// 获取文本框信息
number = txtResult.getText();
// 赋值给number1
number1 = Double.parseDouble(number);
// 文本框重置
number = "";
txtResult.setText("");
// 运算符
operator = Num;
}
// 按下等于号
else if (Num.equals("=")) {
// 获取文本框信息
number = txtResult.getText();
// 赋值给number2
number2 = Double.parseDouble(number);
// 计算
if(operator.equals("+")) {
result = number1 + number2;
}
if(operator.equals("-")) {
result = number1 - number2;
}
if(operator.equals("*")) {
result = number1 * number2;
}
if(operator.equals("/")) {
result = number1 / number2;
}
// 显示计算结果
txtResult.setText("" + result);
} else {
number += Num;
txtResult.setText(number);
}
}
}
public static void main(String[] args) {
new TaskCalculator6618();
}
}