事件监听
1)什么叫事件监听?你在电脑上设置个按钮,通过点击按钮来反馈里面所显示出来的信息。这就叫事件监听。
2)事件监听概念:通过某一事物源对象(当某种事件发生时),然后向监听器传送某种事件对象,监听器里面封装了某种事件信息,接到事件对象后进行某种处理,这就是事件监听。
3)简单来说以学校放课铃作为事物源对象,然后放课铃声响起来即事件发生。假如学生是一个监听器,学生作为监听器接收到放课铃声响起,然后学生对放课铃声进行下课处理,这就是事件监听。
一、通过点击按钮设置监听打印出HellWorld
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//通过点击按钮设置监听打印出HellWorld
public class TestActionEvent {
public static void main(String[] args) {
Frame f=new Frame("Java Frame");
Button b=new Button("Press Me");
Monitor m=new Monitor();
b.addActionListener(m);
f.add(b,BorderLayout.CENTER);
f.pack();
f.setVisible(true);
}
}
class Monitor implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("HellWorld");
}
}
二、通过设置setActionCommand区分同一监听对象
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//通过设置setActionCommand区分同一监听对象
public class TestActionEvent2 {
public static void main(String[] args) {
Frame f=new Frame("Java Frame");
Button b1=new Button("Start");
Button b2=new Button("Stop");
Monitor2 m=new Monitor2();
b1.addActionListener(m);
b2.addActionListener(m);
b2.setActionCommand("GAME OVER");
f.add(b1,BorderLayout.NORTH);
f.add(b2,BorderLayout.SOUTH);
f.pack();
f.setVisible(true);
}
}
class Monitor2 implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("HellWorld"+e.getActionCommand());
}
}
三、通过文本监听对象
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//通过文本监听对象
public class TFActionEvent {
public static void main(String[] args) {
new TFFrame();
}
}
class TFFrame extends Frame{
public TFFrame() {
TextField tf=new TextField();
//创建文本
tf.addActionListener(new TFActionEventListener());;
//在文本中添加监听对象TFActionEventListener
tf.setEchoChar('*');
//设置回显字符,输入看不到,输出显示
add(tf);
//在Frame窗口添加文本
pack();
//打包
setVisible(true);
}
}
class TFActionEventListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
TextField tf = (TextField) e.getSource();
/*getSource()方法在java.awt.event包中的EventObject类
且返回值是Object对象,所以此处需强转*/
System.out.println(tf.getText());
//获得文本
tf.setText("");
//每每输出完后显示为空
}
}
四、通过多个文本监听四则运算
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TFMath {
public static void main(String[] args) {
new TFFrame1().launchFrame();
}
}
class TFFrame1 extends Frame{
TextField num1,num2,num3;
public void launchFrame(){
num1=new TextField(10);
num2=new TextField(10);
num3=new TextField(15);
//创建三个文本分别设置长度
Label lblPlus=new Label("+");
//设置加号
Button btnEquals=new Button("=");
//设置等号按钮
btnEquals.addActionListener(new MyMonitor1(this));
//this指向TFFrame1,随时可访问TextField里面的成员变量
setLayout(new FlowLayout());
add(num1);
add(lblPlus);
add(num2);
add(btnEquals);
add(num3);
//比如1+2=3里面共五个元素,以流水线方式布局添加
pack();
setVisible(true);
}
}
class MyMonitor1 implements ActionListener{
TFFrame1 tf=null;
public MyMonitor1(TFFrame1 tf) {
this.tf = tf;
}
@Override
public void actionPerformed(ActionEvent e) {
int n1=Integer.parseInt(tf.num1.getText());
//将文本字符串转换成Int类型再赋值给n1
int n2=Integer.parseInt(tf.num2.getText());
tf.num3.setText(""+(n1+n2));;
//num3获得输出结果
}
}
五、鼠标监听事件
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;
public class MyMouseApdapter {
public static void main(String[] args) {
new MyFrame4("Java Frame");//自定义窗口命名
}
}
class MyFrame4 extends Frame{
//1)设置窗口以及鼠标监听事件
ArrayList points=null;
//自定义ArrayList集合points为空
public MyFrame4(String s) {
super(s);
points = new ArrayList();
//points初始化
setLayout(null);
//设置布局管理器为空,否则Frame默认布局管理器为BorderLayou
setBounds(300, 300, 300, 300);
//设置窗口坐标以及大小
setBackground(new Color(204,204,204));
//设置背景三原色
setVisible(true);
//设置视图可见
this.addMouseListener(new Monitor1());
//监听MyFrame4事件鼠标
/*MouseAdapter接口实现MouseListener,Monitor1继承MouseAdapter*/
}
//2)
public void paint(Graphics g){
//调用paint画笔方法
Iterator i = points.iterator();
//迭代points集合
while (i.hasNext()) {
//如果仍有元素可以迭代,则返回 true
Point p = (Point) i.next();
//返回迭代的下一个Point(点)
g.setColor(Color.BLUE);
//设置画笔颜色
g.fillOval(p.x, p.y, 10, 10);
//设置画笔图形
}
}
public void addPoint(Point p){
//自定义addPoint方法
points.add(p);
//points添加Point(点)
}
}
class Monitor1 extends MouseAdapter{
public void mousePressed(MouseEvent e) {
//重写mousePressed方法
MyFrame4 f=(MyFrame4)e.getSource();
//getSource方法返回类型Object,事件源指针指向MyFrame4
f.addPoint(new Point(e.getX(),e.getY()));
//MyFrame4调用自定义addPoint方法,监听鼠标坐标位置
f.repaint();
//Frame调用父类Component中的repaint方法
/*repaint()方法是一个具有刷新页面效果的方法,若不调用repaint方法图形发生变化后不会立刻显示
repaint调用update()清除当前显示并再调用paint()方法
如果不调用repaint()就不能实现每一次的刷新显示,不能立刻显示就无法马上进行下一步的绘画*/
}
}
六、匿名监听Windows关闭事件
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestWindows {
public static void main(String[] args) {
new MyWindows("MyWindowAdapter");
}
}
class MyWindows extends Frame{
public MyWindows(String s) {
super(s);
setLayout(null);
setBounds(300, 300, 300, 300);
setVisible(true);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);//0正常退出,-1非正常退出
setVisible(false);
}
});
}
}