Java Swing事件处理方法

开发 后端
本文介绍Java Swing事件处理方法,包括新建一个组件,将该组件添加到相应的面板和注册监听器以监听事件源产生的事件等。

Swing是目前Java中不可缺少的窗口工具组,是用户建立图形化用户界面(GUI)程序的强大工具。Java Swing组件自动产生各种事件来响应用户行为。如当用户点击按钮或选择菜单项目时,Swing组件会产生一个ActionEvent。Swing组件会产生许多事件,如ActionEvents,ChangeEvents,ItemEvents等,来响应用户的鼠标点击行为,列表框中值的改变,计时器的开始计时等行为。在Java Swing编程中,通过注册监听器,我们可以监听事件源产生的事件,从而在事件处理程序中处理我们所需要处理的用户行为。

Java Swing中处理各组件事件的一般步骤是:

1. 新建一个组件(如JButton)。

2. 将该组件添加到相应的面板(如JPanel)。

3. 注册监听器以监听事件源产生的事件(如通过ActionListener来响应用户点击按钮)。

4. 定义处理事件的方法(如在ActionListener中的actionPerformed中定义相应方法)。

我们可以用多种方法实现。但人们通常用二种方法。第一种方法是只利用一个监听器以及多个if语句来决定是哪个组件产生的事件;第二种方法是使用多个内部类来响应不同组件产生的各种事件,其具体实现又分两种方式,一种是匿名内部类,一种是一般内部类。

为了说明如何使用上述方法实现事件的处理方法,我们建立一个简单的应用程序。该程序界面有两个按钮,当用户点击相应的按钮,就会弹出一个对话框显示相应的内容。通过这个简单程序,你可以实现自己更多、更复杂的用户界面程序。

首先,我们利用单个监听器来实现该程序。我们定义一个名为Simple1的类来包括所有代码。所有的用户行为(如点击按钮)由一个监听器SimpleListenner中的actionPerformed方法来处理。以下是代码:

  1. import java.awt.*;  
  2. import java.awt.event.*;  
  3. import javax.swing.*;  
  4. public class Simple3  
  5. {  
  6. private static JFrame frame; // 定义为静态变量以便main使用  
  7.  
  8. private static JPanel myPanel; // 该面板用来放置按钮组件  
  9.  
  10. private JButton button1; // 这里定义按钮组件  
  11.  
  12. private JButton button2; // 以便让ActionListener使用  
  13. // 利用一般内部类来监听每一个事件源产生的事件如(button1, button2)  
  14.  
  15. private class Button1Handler implements ActionListener  
  16. {  
  17. public void actionPerformed(ActionEvent e)  
  18. {  
  19. JOptionPane.showMessageDialog(frame,  
  20. "按钮1 被点击");  
  21. }  
  22. }  
  23. private class Button2Handler implements ActionListener  
  24. {  
  25. public void actionPerformed(ActionEvent e)  
  26. {  
  27. JOptionPane.showMessageDialog(frame,  
  28. "按钮2 被点击");  
  29. }  
  30. }  
  31. public Simple3() // // 构造器, 建立图形界面  
  32.  
  33. {  
  34. // 新建面板  
  35.  
  36. myPanel = new JPanel();  
  37. // 新建按钮  
  38.  
  39. button1 = new JButton("按钮1"); // 新建按钮1  
  40.  
  41. button2 = new JButton("按钮2");  
  42. // 对每一个组件注册监听内部类  
  43.  
  44. button1.addActionListener(new Button1Handler());  
  45. button2.addActionListener(new Button2Handler());  
  46. myPanel.add(button1); // 添加按钮到面板  
  47.  
  48. myPanel.add(button2);  
  49. }  
  50. public static void main(String s[])  
  51. {  
  52. Simple3 gui = new Simple3(); // 新建Simple3组件  
  53.  
  54. frame = new JFrame("Simple3"); // 新建JFrame  
  55. // 处理关闭事件的通常方法  
  56.  
  57. frame.addWindowListener(new WindowAdapter() {  
  58. public void windowClosing(WindowEvent e)  
  59. {System.exit(0);} });  
  60. frame.getContentPane().add(myPanel);  
  61. frame.pack();  
  62. frame.setVisible(true);  
  63. }  

以上分析了在Java Swing中事件的处理方式,其中利用一般内部类来实现的方法,从代码书写、阅读、维护以及程序的可扩展性角度来看,最为值得推荐供大家使用。

【编辑推荐】

  1. Swing应用的数据验证
  2. 浅谈Swing和SWT比较
  3. 应该改进的Java Swing 2.0
  4. 浅析Swing Set示例
  5. Swing中的JFormattedTextField组件实例
责任编辑:佚名 来源: 机械工业出版社
相关推荐

2009-06-09 16:53:22

Java Swing处理方法比较

2012-03-26 12:23:25

JavaSwing

2009-07-17 10:31:18

paint方法Swing组件

2013-02-21 16:51:18

JavaNimbusJava Swing

2009-07-15 18:06:38

Swing线程

2009-07-15 11:19:17

invokeLaterSwing

2009-07-10 09:38:06

Java swing组

2009-07-17 10:42:06

Swing应用程序处理函数

2009-07-17 16:41:48

actionPerfoSwing

2010-08-09 09:47:34

Flex事件机制

2011-08-01 14:26:41

iPhone 应用程序 事件

2009-07-15 16:29:41

Swing绘画

2009-07-15 10:06:54

Swing实现MDI

2009-09-07 15:21:38

Java与C#事件处理

2010-08-09 11:14:36

Flex事件处理

2009-07-17 09:55:02

事件监听器SWT和SwingAWT

2009-07-10 14:20:01

AcceleratorJava Swing

2012-01-17 13:41:34

JavaSwing

2012-01-17 14:09:54

JavaSwing

2012-01-17 14:05:29

JavaSwing
点赞
收藏

51CTO技术栈公众号