java的事件驱动
来源:互联网 发布:mac ae导出快捷键 编辑:程序博客网 时间:2024/05/29 08:18
事件和事件源:
事件可以定义为程序发生了某些事情的信号.能创建一个事件并触发该事件的组件称为该事件的源对象或源组件.事件类的根类是java.util.EventObject
事件对象包括与事件相关的一切属性,可以使用EventObject中的实例方法getSource()获得事件的源对象。EventObject的子类的对象处理特定类型的事件。如动作事件,窗口事件,组件事件,鼠标事件,按键事件。
java使用一种基于委托的模型来处理事件:原对象触发一个事件,对此事件感兴趣的对象来处理它。将对此事件感兴趣的对象称为监听器(listener)一个对象要成为原对象上的事件监听器,需要具备两个条件。
(1)调用source.addXListener(listener)来注册一个实例。注册方法依赖于事件的类型。如果事件类型是ACtionEvent,那么对应的注册方法是addActionListener.一般来说XEvent的注册命名方法是addXListener.
一个源对象可以触发几种类型的事件。
(2)要定义监听器对象的类,确保监听器有处理这个事件的正确方法。java为每一种类型的事件都提供了监听器接口。通常XEvent的监听器接口是XListener,监听器MouseMotionListener例外。ActionListener的每个 监听器都应该实现ActionListener接口。
注册一个监听器:
JButton jbtOK = new JButton("OK");
ActionListener listener1 = new OKListenerClass();
jbtOK.addActionListener(listener1);
事件对象包含于事件相关的信息,为判断一个对象是按钮,复选框还是单选按钮,,都可以使用e.getSource()方法获得源对象。
写一个程序用两个按钮控制圆的大小
(1)定义名为EnlargeListener的监听类,实现ActionListener
(2)创建一个监听器,并将其注册到jbtEnlarge
(3)在CirclePanel中添加一个名为enlarge()的方法来增加半径,然后重绘
(4)实现EnlargeListener中的actionPerformed方法来调用canvas.enlarge()
(5)为了让actionPerformed方法能够访问引用变量canvas,将EnlargeListener定义为ControlCircle类的内部类
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ControlCircle extends JFrame {
private JButton jbtEnlarge = new JButton("Enlarge");
private JButton jbtShrink = new JButton("Shrink");
private CirclePanel canvas = new CirclePanel();
public ControlCircle(){
JPanel panel = new JPanel();
panel.add( jbtEnlarge);
panel.add( jbtShrink);
this.add(canvas ,BorderLayout.CENTER);
this.add(panel,BorderLayout.SOUTH);
jbtEnlarge.addActionListener(new EnlargeListener());
}
public static void main(String[] args){
JFrame frame = new ControlCircle();
frame.setTitle( "ControlCircle");
frame.setLocationRelativeTo( null);
frame.setSize(200,200);
frame.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE);
frame.setVisible( true);
}
class EnlargeListener implements ActionListener{
public void actionPerformed(ActionEvent e){
canvas.enlarge();
}
}
class CirclePanel extends JPanel{
private int radius = 5;
public void enlarge(){
radius++;
repaint();
}
protected void paintComponent(Graphics g){
super.paintComponents(g);
g.drawOval(getWidth()/2 - radius,getHeight()/2 - radius, 2 * radius, 2 * radius );
}
}
}
内部类:
定义在另一个类范围内的类成为内部类。内部类可以像常规类一样使用。如果内部类只是被外部类使用,那就将该类定义为内部类。
内部类可以引用定义在它所嵌套的外部类中的数据和方法
内部类的对象经常在外部类中创建
内部类的应用就是将从属类合并到主类中,可以减少源文件数量,便于管理
- java的事件驱动
- Java的button事件驱动
- java-事件驱动设计-窗口事件的处理
- java 事件驱动模型
- Java事件驱动模式
- JAVA事件驱动模式
- 事件驱动的比较
- IOS_UITableview的事件驱动
- 事件驱动的思考
- redis的事件驱动
- 事件、过程驱动与Java的一些瞎想
- 简述Java中,GUI的事件驱动模式
- 事件驱动模型的角度来看看 JAVA NIO
- java事件驱动深度历险
- Java Swing,模拟事件驱动
- java 事件驱动 学习笔记
- Java事件驱动模式,Spring事件
- java基于事件驱动之spring事件驱动
- Codeforces Round #142 (Div. 1), problem: (C) Triangles
- Js获取当前日期时间及其它操作
- UVa 101 - The Blocks Problem
- vc 绘图
- 过了20岁,等不了你了
- java的事件驱动
- DLL的静态信息
- c++ 内存管理 完整版
- java匿名类监听器
- java基础:线程互斥
- pat 1010 radix 部分正确20分
- Java鼠标事件MouseEvent
- 在Eclipse外使用JUnit测试
- 注册表学习——改变系统时钟的显示格式