监听事件
事件监听机制的特点:
1.事件源
2.事件
3.监听器
4.事件处理
事件源
:就是awt包或者swing包中的那些图形用户界面组件。(如:按钮)
事件
:每一个事件源都有自己特点有的对应事件和共性事件。(如:鼠标单击事件)
监听器
:将可以触发某一事件的动作(不止一个动作)都已经封装到了监听器中。
以上三者,在java中都已经定义好了, 直接获取其对象来用就可以了。
我们要做的事情是,就是对产生的动作进行处理。
事件监听
package gui.study;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Demo08 {
public static void main(String[] args) {
Frame frame = new Frame();
//点击按钮触发事件
Button button = new Button();
MyActionListener myActionListener = new MyActionListener(); //对象实例化!静态调用非静态需实例化对象
button.addActionListener(myActionListener);
frame.add(button, BorderLayout.CENTER);
frame.setSize(400,400);
frame.setLocation(300,400);
WindowClose(frame); //调用WindowClose方法! 关闭窗口
frame.setVisible(true); //可视化
}
//方法! 关闭窗口事件
private static void WindowClose(Frame frame){
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent windowEvent) {
System.exit(0);
}
});
}
}
//定义类! 窗口监听事件
class MyActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent actionEvent) {
System.out.println("你点击了一次");
}
}
运行结果:
输入框监听事件
package com.gui;
//输入框监听事件
import java.awt.*;
import java.awt.event.*;
public class Demo02 {
public static void main(String[] args) {
MyFrame myFrame = new MyFrame();
}
}
class MyFrame extends Frame{
public MyFrame() {
TextField textField = new TextField();
add(textField);
//监听这个文本框输入的文字
MyActionListener myActionListener = new MyActionListener();
//按下Enter键就会触发这个输入框事件
textField.addActionListener(myActionListener);
textField.setEchoChar('*'); //设置替换编码!可用于密码输入
setSize(400,400); //设置窗体大小
setLocation(300,400); //设置起始坐标
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 textField = (TextField) e.getSource();
System.out.println(textField.getText()); //获得输入框文本
textField.setText(""); //按下Enter键自动清空输入框内字符
}
}
运行结果:
内部类实现简单加法计算器
package com.gui;
//内部类实现简单加法计算器
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Demo03 {
public static void main(String[] args) {
new Calculator().Calculator(); //实例化
}
}
//计算器类
class Calculator extends Frame{
TextField num1,num2,num3;
public void Calculator(){
num1 = new TextField(10); //文本框! 设置字符数
num2 = new TextField(10);
num3 = new TextField(20);
Button button = new Button("="); //按钮
button.addActionListener(new MyCalculatorListener());
Label label = new Label("+"); //标签
setLayout(new FlowLayout()); //流式布局
add(num1);
add(label);
add(num2);
add(button);
add(num3);
setLocation(300,400);
setSize(500,100);
setVisible(true);
//关闭窗口事件
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
//监听类
private class MyCalculatorListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
//获取加数和被加数
int n1 = Integer.parseInt(num1.getText()); //将String类型转换为int类型
int n2 = Integer.parseInt(num2.getText());
//将前两个值家法运算后,放至第三个文本框
num3.setText(""+(n1+n2));
num1.setText(""); //清空文本框字符
num2.setText("");
}
}
}
运行结果: