java事件和事件处理
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
contentPane.add(panel1); contentPane.add(panel2, BorderLayout.SOUTH); }
contentPane.add(panel1); contentPane.add(panel2, BorderLayout.SOUTH); }
public static void main(String args[]) { EventDemo jfd = new EventDemo("A Simple Event Program"); jfd.setVisible(true);
public void windowClosing(WindowEvent e) { System.exit(0);// 当单击关闭按钮时,退出整个应用程序
} }
3.5.3 通过匿名内部类
当事件处理程序特别简短的时候,可以写成匿名内部类的形式。例 3-5 就是 将例 3-4 的窗口关闭事件写成了匿名内部类的形式。
//例3-5 //例3-5 import java.awt.*; import java.awt.event.*;//和事件处理相关的类在这个包中,必须引入 import javax.swing.*;
public class EventDemo extends JFrame {
// 用程序
public EventDemo(String str) { super(str); setSize(300, 300); setLocation(100, 100); Container contentPane = getContentPane(); this.addWindowListener(new WinListener());//注册监听器 this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0);// 当单击关闭按钮时,退出整个应
public EventDemo(String str) {
super(str); setSize(300, 300); setLocation(100, 100); Container contentPane = getContentPane(); this.addWindowListener(this);//为类的对象自身注册监听器
JPanel panel1 = new JPanel(); panel1.setBackground(Color.red);
JPanel panel2 = new JPanel(); JButton b = new JButton("button");// 生成事件源对象 b.addActionListener(new ButtonListener());// 注册监听器, 当单击鼠标时会自动执行ButtonListener类中的方法 panel2.add(b);
} });
JPanel panel1 = new JPanel(); panel1.setBackground(Color.red);
JPanel panel2 = new JPanel(); JButton b = new JButton("button");// 生成事件源对象 b.addActionListener(new ButtonListener());// 注册监听器, 当单击鼠标时会自动执行ButtonListener类中的方法 panel2.add(b);
第三章 事件和事件处理
1. 自动生成接口中的所有方法
对于实现了某个接口的类,必须要实现接口中的所有方法,即使有的方法我 们并不需要,也要有一个空的方法体。例如下图中实现了 WindowListener 接口 的类,要实现接口中的所有七个方法,要我们一个一个的输入,比较麻烦,而且 容易出错(注意这种错误很难找到,如果写错,系统只是认为你重新写了一个方 法)所以接口中的方法有以下三种方法得到 1. 从 API 中复制; 2. 右单击继承了接口的类名从弹出的快捷菜单中选择 Source -> Override / Implement Methods 方法自动生成; 3. 点击右侧红色小叉号,有相关的提示也可以自动生成。
public class EventDemo extends JFrame {
public EventDemo(String str) { super(str); setSize(300, 300); setLocation(100, 100); Container contentPane = getContentPane(); this.addWindowListener(new WinListener());//注册监听器
}
//这些方法都写在EventDemo类内 public void windowActivated(WindowEvent e) { } public void windowClosed(WindowEvent e) { }
public void windowClosing(WindowEvent e) { System.exit(0);// 当单击关闭按钮时,退出整个应用程序
源,即是对哪一个组件进行的单击鼠标的动作 // 因为getSource方法返回的是Object类,所以要强制转换,然后通过
setText方法将按钮上的自变为已按下 }
}
// 编写窗口监听器类 class WinListener extends WindowAdapter{//继承了相应的适配器类 //只需重写我们关心的方法即可
2. 注册事件监听器的三种方法
***Event 对应了相应的***Listener,***Listener 是一个接口,它里面有一 些方法(如上表),我们需要重写某些方法以实现我们想要的功能。最后我们还 需要注册监听器将事件源和相应的监听器联系起来,一般是通过 事件源.add***Listener(***Listener) 来实现的,该方法有一个参数,为***Listener 类的对象。下面我们讲解三种注 册监听器的方法。
源,即是对哪一个组件进行的单击鼠标的动作 // 因为getSource方法返回的是Object类,所以要强制转换,然后通过
setText方法将按钮上的自变为已按下 }
}
3.5.2 通过事件适配器类
因为 implements 某个接口的类必须实现接口中的全部方法,在上面的窗口 事件中,我们仅仅需要关闭窗口事件,但却要写六个空方法。JAVA 中为了简化 编程而提供了事件适配器类,在事件适配器类中默认的实现了相应接口中的全部 方法(都为空),几乎每一个相应的***Listener 都对应了一个***Adapter(仅 有一个方法的除外,例如 ActionListener,它只有一个方法 actionPerformed)。 如 WindowListener 接口对应的事件适配器类是 WindowAdapter,而 KeyListener 接口对应的适配器类是 KeyAdapter。这样编写监听器类通过继承适配器类我们 就省去了通过接口实现必须实现所有抽象方法的烦恼,我们只需重写我们想要实 现的方法就可以了。
// 编写相应的监听器类 class ButtonListener implements AΒιβλιοθήκη BaidutionListener { // 实现了ActionListener 接口
public void actionPerformed(ActionEvent e) { // 重写接口中的方法 ((JButton) e.getSource()).setText("已按下"); // 获取事件
JPanel panel1 = new JPanel(); panel1.setBackground(Color.red);
JPanel panel2 = new JPanel(); JButton b = new JButton("button");// 生成事件源对象 b.addActionListener(new ButtonListener());// 注册监听器, 当单击鼠标时会自动执行ButtonListener类中的方法 panel2.add(b);
重写窗口监听器,不同的是 WinListener 类派生自 WindowAdapter,这样只 要重写 windowClosing 方法即可。
//例3-4 import java.awt.*; import java.awt.event.*;//和事件处理相关的类在这个包中,必须引入 import javax.swing.*;
常用的 Adapter 类
EventListener
ComponentListener ContainerListener FocusListener KeyListener MouseListener MouseMotionListener WindowListener
EventAdapter
ComponentAdapter ContainerAdapter FocusAdapter KeyAdapter MouseAdapter MouseMotionAdapter WindowAdapter
//例3-3 import java.awt.*; import java.awt.event.*;//和事件处理相关的类在这个包中,必须引入 import javax.swing.*;
public class EventDemo extends JFrame implements WindowListener{ //类EventDemo要实现WindowListener接口
下面是第二种方法的详细介绍: 我们可以通过 eclipse 自动生成接口中的所有方法的空实现,右单击实现了接口 的类,从弹出的快捷菜单中单击 Source->Override/Implement Methods
弹出 Override/Implement Methods 对话框
选中要实现的接口中的所有方法,单击 0K 按钮,将所有方法已经加到了当前的 类中,我们只有在我们要用到的方法体中写相关的代码即可。
contentPane.add(panel1); contentPane.add(panel2, BorderLayout.SOUTH); }
public static void main(String args[]) { EventDemo jfd = new EventDemo("A Simple Event Program"); jfd.setVisible(true);
}
public void windowDeactivated(WindowEvent e) { } public void windowDeiconified(WindowEvent e) { } public void windowIconified(WindowEvent e) { } public void windowOpened(WindowEvent e) { } }
3.5.1 通过接口实现
我们可以通过将事件监听器作为单独的类,该类实现了相应的接口来实现 (下例中的 ButtonListener);但在实际开发过程中,我们往往将这两个类写 在一起,我们可以将对窗体的监听写在 EventDemo 中,即一个窗体类自己监听自 己的事件(WindowListener)。
} }
// 编写相应的监听器类 class ButtonListener implements ActionListener { // 实现了ActionListener 接口
public void actionPerformed(ActionEvent e) { // 重写接口中的方法 ((JButton) e.getSource()).setText("已按下"); // 获取事件