Java的事件处理机制
- 格式:doc
- 大小:73.00 KB
- 文档页数:5
Java的事件处理机制
复习知识: AWT下的GUI编程复习,显示一个窗体/给窗体添加菜单
思考:点击菜单上的关闭时,如何退出程序?
准备知识:接口,中的方法都是抽象方法。实现接口,重写其中的方法。
概念部分:
1.事件:Event
是一种消息对象,封装了与事件发生相关的信息,
如操作键盘会引发KeyEvent事件,
单击关闭按钮会引发WindowEvent事件,
单击命令按钮或选择菜单项目会引发ActionEvent事件
等等
2.事件源:Event Source
产生事件的对象,
如命令按钮和单选按钮都是事件源,单击他们时,会引发ActionEvent事件
单选按钮会产生ItemEvent事件。
3.事件监听器:Event Listener
在事件发生时,事件源负责给予通知的一种对象。接收到事件通知的监听器主动的对事件进行处理。
两件事:将自己注册给事件源;事件的处理
4.事件处理器Event Handler
事件处理方法,用来接受事件并处理事件的方法。
Java事件处理的步骤:
1.类 实现相应的事件监听器接口
2.重写接口中抽象方法
3.给事件源注册事件监听器
【例题】关闭窗口的实现
public class NotepadDemo{
private Frame mainForm;
private MenuBar mb;
private Menu m1;
private Menu m2;
private MenuItem mExit;
private MenuItem mi1;
private MenuItem mi2;
private ExitHandler eh;
public NotepadDemo(){
mainForm = new Frame();
mb = new MenuBar();
m1 = new Menu("文件(F)");
m2 = new Menu("编辑(E)");
mi1 = new MenuItem("新建 Ctrl + N");
mi2 = new MenuItem("打开 Ctrl + O");
mExit = new MenuItem("退出(X)");
mainForm.setMenuBar(mb);
mb.add(m1);
mb.add(m2);
m1.add(mi1);
m1.add(mi2);
m1.add(mExit);
mainForm.setBounds(0, 0, 400, 300);
eh = new ExitHandler();
//注册事件监听器
mExit.addActionListener(eh);
mi1.addActionListener(eh);
mi2.addActionListener(eh);
//注册Form的关闭监听器
mainForm.addWindowListener(eh);
}
public void NotepadShow(){
mainForm.setVisible(true);
}
public static void main(String[] args) {
NotepadDemo nd = new NotepadDemo();
nd.NotepadShow(); }
//实现事件监听器接口
class ExitHandler implements ActionListener,WindowListener{
//重写其中的抽象方法
public void actionPerformed(ActionEvent e) {
if(e.getSource()==mExit){
System.exit(0);
}
else if(e.getSource()==mi1){
System.out.println("新建按钮被按下");
}
else if(e.getSource()==mi2){
System.out.println("打开按钮被按下");
}
}
public void windowActivated(WindowEvent arg0) {
//激活窗口 P190
}
public void windowClosed(WindowEvent arg0) {
//窗口关闭时
}
public void windowClosing(WindowEvent arg0) {
//退出窗口
System.exit(0);
}
public void windowDeactivated(WindowEvent arg0) {
//窗口非激活时
}
public void windowDeiconified(WindowEvent arg0) {
//窗口非图标化时
}
public void windowIconified(WindowEvent arg0) {
//窗口图标化时
}
public void windowOpened(WindowEvent arg0) { //窗口打开时
}
}
}
【练习】两个窗体,每个窗体上各有一个按钮,当点击此按钮时显示另外一个窗体
public class FrameChangeDemo {
public int n = 1;
Frame1 f1;
Frame2 f2;
public FrameChangeDemo(){
f1 = new Frame1();
f2 = new Frame2();
}
public static void main(String[] args) {
FrameChangeDemo fcd = new FrameChangeDemo();
}
class Frame1 extends Frame{
Button btn;
public Frame1(){
this.setBounds(0,0,400,300);
btn = new Button("显示窗体2");
btn.setBackground(Color.red);
btn.addActionListener(new BtnHandle());
this.add(btn);
this.setTitle("窗体1");
this.setVisible(true);
}
}
class Frame2 extends Frame{ Button btn;
public Frame2(){
this.setBounds(0,0,400,300);
btn = new Button("显示窗体1");
btn.setBackground(Color.green);
btn.addActionListener(new BtnHandle());
this.add(btn);
this.setTitle("窗体2");
this.setVisible(false);
}
}
class BtnHandle implements ActionListener{
public void actionPerformed(ActionEvent e) {
if(n==1){
f1.setVisible(false);
f2.setVisible(true);
n=2;
}else if(n==2){
f1.setVisible(true);
f2.setVisible(false);
n=1;
}
}
}
}