我的总结5《事件机制》
1.事件源
有哪些可以作为事件源?
Java中所有的图形界面组件都可以成为事件源对象。
动作发生哪一个组件对象上,那么该组件对象就是事件源。
2.监听器方法(事件类型)
事件源对象.addActionListener() ActionListener
注意:1.在输入框事件源对象中只能捕获回车键
2.在按钮事件源对象中只能捕获鼠标点击操作
addMouseListener() MouseListener
addMouseMotionListener() MouseMotionListener
addKeyListener() KeyListener
3.事件的处理者
最终执行的对象,这个类必须要实现事件接口。
4.事件的执行流程
1.确定事件源对象
2.确定要发生的是什么类型的事件。
3.给事件源添加监听器方法
4.实例化事件处理类的对象(定义类实现事件接口,并且实现接口中的方法)
5.给监听器方法绑定事件处理类对象
只要事件源发生监听器方法能捕获到的动作,那么方法就会捕获动作信息
以及事件源的相关信息,然后激活事件处理对象,将收集的信息和动作一并交给事件
处理对象,事件处理对象会根据信息自动调用事件处理方法。
5.参数传递:
事机机制中参数传递主要是使用构造方法进行传递,一般传递的都是地址
实验代码:加减乘除计算器
/**
* 定义一个计算器面类
*
* @author linzifan
*
*/
public class Login {
/**
* 程序的入口主函数
*/
public static void main(String[] args) {
// 实例化Login类的对象
Login login = new Login();
// 调用初始化界面的方法
login.initUI();
}
/**
* 初始化界面的方法
*/
public void initUI() {
// 实例化一个JFrame类的对象
javax.swing.JFrame jf = new javax.swing.JFrame();
// 设置jf窗体对象的属性值
jf.setTitle("计算器");// 设置窗体的标题
jf.setSize(300, 200);// 设置窗体的大小
jf.setDefaultCloseOperation(3);// 设置窗体关闭时退出程序
jf.setLocation(200, 200);// 设置窗体显示的位置
jf.setResizable(false);// 设置禁止用户调整窗体的大小
// 实例化一个流式布局类的对象
java.awt.FlowLayout fl = new java.awt.FlowLayout();
// 设置窗体的布局方式为流式布局
jf.setLayout(fl);
// 实例化一个数字1标签对象
javax.swing.JLabel lblName1 = new javax.swing.JLabel("数字1:");
// 将对象添加到窗体对象上
jf.add(lblName1);
// 实例化一个输入框对象,来输入数字1
javax.swing.JTextField txtName1 = new javax.swing.JTextField(20);
// 将对象添加到窗体对象上
jf.add(txtName1);
// 实例化一个数字2标签对象
javax.swing.JLabel lblName2 = new javax.swing.JLabel("数字2:");
// 将对象添加到窗体对象上
jf.add(lblName2);
// 实例化一个输入框对象,来输入数字2
javax.swing.JTextField txtName2 = new javax.swing.JTextField(20);
// 将对象添加到窗体对象上
jf.add(txtName2);
txtName1.getText();
txtName2.getText();
// 实例化一个按钮对象,加
javax.swing.JButton btnLogin1 = new javax.swing.JButton("加");
// 将对象添加到窗体对象上
jf.add(btnLogin1);
// 实例化一个按钮对象,减
javax.swing.JButton btnLogin2 = new javax.swing.JButton("减");
// 将对象添加到窗体对象上
jf.add(btnLogin2);
// 实例化一个按钮对象,乘
javax.swing.JButton btnLogin3 = new javax.swing.JButton("乘");
// 将对象添加到窗体对象上
jf.add(btnLogin3);
// 实例化一个按钮对象,除
javax.swing.JButton btnLogin4 = new javax.swing.JButton("除");
// 将对象添加到窗体对象上
jf.add(btnLogin4);
// 实例化一个加事件处理类的对象
Plus l1 = new Plus(txtName1,txtName2);
//给事件源,按钮加,添加一个动作监听器方法,绑定定义事件处理类的对象。
btnLogin1.addActionListener(l1);
// 实例化一个减事件处理类的对象
Subduct l2 = new Subduct(txtName1,txtName2);
//给事件源,按钮减,添加一个动作监听器方法,绑定定义事件处理类的对象。
btnLogin2.addActionListener(l2);
// 实例化一个乘事件处理类的对象
Multiply l3 = new Multiply(txtName1,txtName2);
//给事件源,按钮乘,添加一个动作监听器方法,绑定定义事件处理类的对象。
btnLogin3.addActionListener(l3);
// 实例化一个除事件处理类的对象
Divide l4 = new Divide(txtName1,txtName2);
//给事件源,按钮除,添加一个动作监听器方法,绑定定义事件处理类的对象。
btnLogin4.addActionListener(l4);
jf.setVisible(true);// 设置窗体为可见
}
}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JTextField;
public class LoginListener implements ActionListener {
public JTextField txt1;
public JTextField txt2;
public LoginListener(JTextField txt1 , JTextField txt2) {
this.txt1= txt1;
this.txt2= txt2;
}
public void actionPerformed(ActionEvent e) {
}
}
import java.awt.event.ActionEvent;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class Plus extends LoginListener {
public Plus(JTextField txt1 , JTextField txt2) {
super(txt1,txt2);
}
public void actionPerformed(ActionEvent e) {
//获取输入框中的信息
String str1 = txt1.getText();
String str2 = txt2.getText();
float i1 = Integer.parseInt(str1);
float i2 = Integer.parseInt(str2);
float i = i1 + i2;
JOptionPane.showMessageDialog(null,"得数是:"+i);
}
}
import java.awt.event.ActionEvent;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class Subduct extends LoginListener {
public Subduct(JTextField txt1 , JTextField txt2) {
super(txt1,txt2);
}
public void actionPerformed(ActionEvent e) {
//获取输入框中的信息
String str1 = txt1.getText();
String str2 = txt2.getText();
float i1 = Integer.parseInt(str1);
float i2 = Integer.parseInt(str2);
float i = i1 - i2;
JOptionPane.showMessageDialog(null,"得数是:"+i);
}
}
import java.awt.event.ActionEvent;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class Multiply extends LoginListener {
public Multiply(JTextField txt1 , JTextField txt2) {
super(txt1,txt2);
}
public void actionPerformed(ActionEvent e) {
//获取输入框中的信息
String str1 = txt1.getText();
String str2 = txt2.getText();
float i1 = Integer.parseInt(str1);
float i2 = Integer.parseInt(str2);
float i = i1 * i2;
JOptionPane.showMessageDialog(null,"得数是:"+i);
}
}
import java.awt.event.ActionEvent;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class Divide extends LoginListener {
public Divide(JTextField txt1 , JTextField txt2) {
super(txt1,txt2);
}
public void actionPerformed(ActionEvent e) {
//获取输入框中的信息
String str1 = txt1.getText();
String str2 = txt2.getText();
float i1 = Integer.parseInt(str1);
float i2 = Integer.parseInt(str2);
float i = i1 / i2;
JOptionPane.showMessageDialog(null,"得数是:"+i);
}
}
1.事件源
有哪些可以作为事件源?
Java中所有的图形界面组件都可以成为事件源对象。
动作发生哪一个组件对象上,那么该组件对象就是事件源。
2.监听器方法(事件类型)
事件源对象.addActionListener() ActionListener
注意:1.在输入框事件源对象中只能捕获回车键
2.在按钮事件源对象中只能捕获鼠标点击操作
addMouseListener() MouseListener
addMouseMotionListener() MouseMotionListener
addKeyListener() KeyListener
3.事件的处理者
最终执行的对象,这个类必须要实现事件接口。
4.事件的执行流程
1.确定事件源对象
2.确定要发生的是什么类型的事件。
3.给事件源添加监听器方法
4.实例化事件处理类的对象(定义类实现事件接口,并且实现接口中的方法)
5.给监听器方法绑定事件处理类对象
只要事件源发生监听器方法能捕获到的动作,那么方法就会捕获动作信息
以及事件源的相关信息,然后激活事件处理对象,将收集的信息和动作一并交给事件
处理对象,事件处理对象会根据信息自动调用事件处理方法。
5.参数传递:
事机机制中参数传递主要是使用构造方法进行传递,一般传递的都是地址
实验代码:加减乘除计算器
/**
* 定义一个计算器面类
*
* @author linzifan
*
*/
public class Login {
/**
* 程序的入口主函数
*/
public static void main(String[] args) {
// 实例化Login类的对象
Login login = new Login();
// 调用初始化界面的方法
login.initUI();
}
/**
* 初始化界面的方法
*/
public void initUI() {
// 实例化一个JFrame类的对象
javax.swing.JFrame jf = new javax.swing.JFrame();
// 设置jf窗体对象的属性值
jf.setTitle("计算器");// 设置窗体的标题
jf.setSize(300, 200);// 设置窗体的大小
jf.setDefaultCloseOperation(3);// 设置窗体关闭时退出程序
jf.setLocation(200, 200);// 设置窗体显示的位置
jf.setResizable(false);// 设置禁止用户调整窗体的大小
// 实例化一个流式布局类的对象
java.awt.FlowLayout fl = new java.awt.FlowLayout();
// 设置窗体的布局方式为流式布局
jf.setLayout(fl);
// 实例化一个数字1标签对象
javax.swing.JLabel lblName1 = new javax.swing.JLabel("数字1:");
// 将对象添加到窗体对象上
jf.add(lblName1);
// 实例化一个输入框对象,来输入数字1
javax.swing.JTextField txtName1 = new javax.swing.JTextField(20);
// 将对象添加到窗体对象上
jf.add(txtName1);
// 实例化一个数字2标签对象
javax.swing.JLabel lblName2 = new javax.swing.JLabel("数字2:");
// 将对象添加到窗体对象上
jf.add(lblName2);
// 实例化一个输入框对象,来输入数字2
javax.swing.JTextField txtName2 = new javax.swing.JTextField(20);
// 将对象添加到窗体对象上
jf.add(txtName2);
txtName1.getText();
txtName2.getText();
// 实例化一个按钮对象,加
javax.swing.JButton btnLogin1 = new javax.swing.JButton("加");
// 将对象添加到窗体对象上
jf.add(btnLogin1);
// 实例化一个按钮对象,减
javax.swing.JButton btnLogin2 = new javax.swing.JButton("减");
// 将对象添加到窗体对象上
jf.add(btnLogin2);
// 实例化一个按钮对象,乘
javax.swing.JButton btnLogin3 = new javax.swing.JButton("乘");
// 将对象添加到窗体对象上
jf.add(btnLogin3);
// 实例化一个按钮对象,除
javax.swing.JButton btnLogin4 = new javax.swing.JButton("除");
// 将对象添加到窗体对象上
jf.add(btnLogin4);
// 实例化一个加事件处理类的对象
Plus l1 = new Plus(txtName1,txtName2);
//给事件源,按钮加,添加一个动作监听器方法,绑定定义事件处理类的对象。
btnLogin1.addActionListener(l1);
// 实例化一个减事件处理类的对象
Subduct l2 = new Subduct(txtName1,txtName2);
//给事件源,按钮减,添加一个动作监听器方法,绑定定义事件处理类的对象。
btnLogin2.addActionListener(l2);
// 实例化一个乘事件处理类的对象
Multiply l3 = new Multiply(txtName1,txtName2);
//给事件源,按钮乘,添加一个动作监听器方法,绑定定义事件处理类的对象。
btnLogin3.addActionListener(l3);
// 实例化一个除事件处理类的对象
Divide l4 = new Divide(txtName1,txtName2);
//给事件源,按钮除,添加一个动作监听器方法,绑定定义事件处理类的对象。
btnLogin4.addActionListener(l4);
jf.setVisible(true);// 设置窗体为可见
}
}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JTextField;
public class LoginListener implements ActionListener {
public JTextField txt1;
public JTextField txt2;
public LoginListener(JTextField txt1 , JTextField txt2) {
this.txt1= txt1;
this.txt2= txt2;
}
public void actionPerformed(ActionEvent e) {
}
}
import java.awt.event.ActionEvent;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class Plus extends LoginListener {
public Plus(JTextField txt1 , JTextField txt2) {
super(txt1,txt2);
}
public void actionPerformed(ActionEvent e) {
//获取输入框中的信息
String str1 = txt1.getText();
String str2 = txt2.getText();
float i1 = Integer.parseInt(str1);
float i2 = Integer.parseInt(str2);
float i = i1 + i2;
JOptionPane.showMessageDialog(null,"得数是:"+i);
}
}
import java.awt.event.ActionEvent;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class Subduct extends LoginListener {
public Subduct(JTextField txt1 , JTextField txt2) {
super(txt1,txt2);
}
public void actionPerformed(ActionEvent e) {
//获取输入框中的信息
String str1 = txt1.getText();
String str2 = txt2.getText();
float i1 = Integer.parseInt(str1);
float i2 = Integer.parseInt(str2);
float i = i1 - i2;
JOptionPane.showMessageDialog(null,"得数是:"+i);
}
}
import java.awt.event.ActionEvent;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class Multiply extends LoginListener {
public Multiply(JTextField txt1 , JTextField txt2) {
super(txt1,txt2);
}
public void actionPerformed(ActionEvent e) {
//获取输入框中的信息
String str1 = txt1.getText();
String str2 = txt2.getText();
float i1 = Integer.parseInt(str1);
float i2 = Integer.parseInt(str2);
float i = i1 * i2;
JOptionPane.showMessageDialog(null,"得数是:"+i);
}
}
import java.awt.event.ActionEvent;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class Divide extends LoginListener {
public Divide(JTextField txt1 , JTextField txt2) {
super(txt1,txt2);
}
public void actionPerformed(ActionEvent e) {
//获取输入框中的信息
String str1 = txt1.getText();
String str2 = txt2.getText();
float i1 = Integer.parseInt(str1);
float i2 = Integer.parseInt(str2);
float i = i1 / i2;
JOptionPane.showMessageDialog(null,"得数是:"+i);
}
}