在此之前,请您以后把完整的代码贴出来,方便大家解答您的问题。
刚开始学Java的时候,看见GUI编程,就跟见那什么似的,一直认为,学会了这个就是高手了。当时一直在说“我kao,我可是会创建窗口、按钮、菜单、工具栏、表格啊,我不拽谁拽?” 现在都忘了差不多了。 嘿嘿,炫耀一下。毕竟咱们也算是同僚了,都热爱过GUI。
这个问题,要从事件监听器来说起。
以按钮为例,按钮本身只是一个控件,他只可以被咱们点击,但是当咱们点击按钮后,程序应该做出何种反应,就不是按钮应该考虑的问题了,而应该交给监听器来处理。
在Java中万物皆对象,因此,所谓的“监听器”也是一个类。
问题来了,如何写一个“监听器”类呢?
这其实和咱们的异常、线程、流一样,若父类是一个“异常类”、“线程类”、“流类”,那么子类也同样是一个“异常类”、“线程类”、“流类”。 显然,只要咱们自己写的类继承了一个监听器类,那么咱们的类,就是一个“监听器”类了。
但是,在GUI编程中,处理不同的事件,会用到不同的监听器,因此咱们应该根据需要,来选择到底要继承哪个“监听器”。
从您给出的“代码片段”看,目的是要监听一个按钮,而按钮被点击的时候,会触发“ActionListener”事件,因此咱们就继承“ActionListener”接口。
代码如下:[code=java]package org.cxy.test;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Demo extends JFrame implements ActionListener{
private JButton btn;
public Demo(String name){
super(name);
this.setBounds(100, 100, 300, 300);//设置窗口左上角坐标和窗口的宽、高。
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(new FlowLayout()); // 修改JFrame的布局。
this.btn = new JButton("点我");
btn.addActionListener(this); // this代表当前对象,即Demo类型的对象。
this.add(btn);
}
public void actionPerformed(ActionEvent arg0) {
JOptionPane.showMessageDialog(this, "你居然敢点我?哼哼!");
}
public static void main(String[] args){
Demo window = new Demo("Action事件测试!");
window.setVisible(true);
}
}[/code]刚才说了,若一个类继承了“监听器”,那么他也就是一个“监听器了”。因此Demo类继承了“ActionListener”,所以它也可以处理“ActionListener”事件。
至此,语句“btn.addActionListener(this); ”含义就好理解了:
给btn按钮增加一个监听器,这个监听器对象就是“Demo”类型的,当用户点击了btn按钮时,会程序自动前往Demo类的“actionPerformed”方法中,处理产生的事件。
因此,咱们现在所要做的就是在“actionPerformed”方法中,写上咱们的代码即可。
我再其内写的语句,就是显示一个对话框,并输出一个String对象。
嘿嘿,看咱们有缘,顺便提一下,完全没必要像上面那样写代码,使用匿名内部类就可以完成了,而且还省事。
代码如下:[code=java]package org.cxy.test;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Demo extends JFrame{
private JButton btn;
public Demo(String name){
super(name);
this.setBounds(100, 100, 300, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(new FlowLayout());
this.btn = new JButton("点我");
btn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
JOptionPane.showMessageDialog(Demo.this, "你居然敢点我?哼哼!");
}
});
this.add(btn);
}
public static void main(String[] args){
Demo window = new Demo("Action事件测试!");
window.setVisible(true);
}
}[/code]这样代码看起来会更好
[ 本帖最后由 cxy_zy 于 2011-07-19 12:37 编辑 ] |