java让窗口处于监听状态_JAVA中实现窗口事件监听的两种方案

1.AWT委托事件模型的基本概念及实现事件监听的流程

事件:是指一个状态的改变或者活动的发生。例如,单击窗口关闭按钮,将改变该窗口的状态,产生窗口关闭事件;单击一个按钮,将产生单击事件等。

事件类:不同的事件需要封装成不同的事件类。JAVA在java.awt.event包中定义了许多事件类,如窗口事件类(WindowEvent)和单击事件类(AcitionEvent)等,javax.Swing.event包中也有很多事件类。

事件源:事件源由用户操作产生,产生事件的组件称为事件源。例如,用户单击窗口关闭按钮的操作,产生窗口关闭事件,此时框架窗口组件就是事件源;单击一个按钮,将产生单击事件,此时的按钮组件就是事件源等。

事件监听器:事件发生时被通知的对象。主要分两步实现:事件源注册事件监听器和事件注册方法。

在java.awt.Event包中的每个事件类都有一个对应的接口,在接口中声明了一个或多个抽象事件的处理方法,如ActionListner中的actionPerformed()方法。

如果一个类实现了事件监听器接口,即是注册了事件监听器,那么该类就具备了响应指定事件和事件处理的能力。例如,一个类为一个按钮注册了事件监听器addActionListner,并且实现了ActionListner接口中的actionPerformed()方法,则当单击事件发生时,就能执行actionPerformed()方法。

按钮单击事件的响应处理程序及处理流程为:

用户à单击按钮à事件源(Button)à注册的à单击事件监听器à创建ActionEvent事件对象eà委托执行à执行ActionListner接口中的actionPerformed(ActionEvent e)事件处理方法。

2.窗口事件实现方案

根据接口的性质,一个类如果实现了一个接口,就必须实现接口中所有的抽象方法。因此,一个类如果要实现一个包含多个方法的接口,即使只需要处理一个事件,也必须实现所有方法,对于不需要响应的事件处理方法也必须设计为空。

JAVA为此提供了一种简便的方法,即事件适配器类,类名带有Adapter标记。这样便引出了窗口事件的两种实现方法:

1)直接在类中实现接口,对不需要响应的窗口事件置为空

2)利用窗口适配器(WindowAdapter),继承它,即只需实现需要响应的事件。

3.实例:一个简单的响应单击事件和窗口事件的计算器程序雏形

该窗口模拟Windows的计算器功能,添加一个文本行和四个按钮,单击【1】,【2】,【+】按钮时,将按钮的标签添加到文本行中;点击【C】按钮时,清空文本行内容;单击窗口的关闭按钮时,将关闭窗口。

程序如下:

importjava.awt.event.*;

importjava.awt.*;

publicclassCalculatorFrameextendsFrameimplementsActionListener

{

privateTextFieldtext;

privateButtonbutton1,button2,buttonPlus,buttonCancel;

publicCalculatorFrame()

{

super("Calculator");

this.setSize(320,120);

this.setBackground(java.awt.Color.lightGray);

this.setLocation(300, 400);

this.setLayout(newjava.awt.FlowLayout(FlowLayout.LEFT));

text=newTextField(40);

text.setEditable(false);

this.add(text);

button1=newButton("1");

button2=newButton("2");

buttonPlus=newButton("+");

buttonCancel=newButton("C");

this.add(button1);

this.add(button2);

this.add(buttonPlus);

this.add(buttonCancel);

button1.addActionListener(this);

button2.addActionListener(this);

buttonPlus.addActionListener(this);

buttonCancel.addActionListener(this);

this.addWindowListener(newWinClose());

this.setVisible(true);

}

//button event method

publicvoidactionPerformed(ActionEvent e) {

//TODOAuto-generated method stub

if(e.getSource() ==buttonCancel)

text.setText(" ");

else

text.setText(text.getText()+e.getActionCommand());

}

publicstaticvoidmain(String arg[])

{

newCalculatorFrame();

}

}

//event listener interface implements

classWinCloseimplementsWindowListener

{

publicvoidwindowClosing(WindowEvent e)

{

System.exit(0);

}

publicvoidwindowActivated(WindowEvent e) {}

publicvoidwindowClosed(WindowEvent e) {}

publicvoidwindowDeactivated(WindowEvent e) {}

publicvoidwindowDeiconified(WindowEvent e) {}

publicvoidwindowIconified(WindowEvent e) {}

publicvoidwindowOpened(WindowEvent e) {}

}

//event adapter

classWinClose2extendsWindowAdapter

{

publicvoidwindowClosing(WindowEvent e)

{

System.exit(0);

}

}

4.总结

上面对事件响应做了介绍,在GUI设计中,事件响应时重中之重,上面只是对窗口事件类作了一个粗略的介绍,对其他的事件类也有类似的操作方法。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值