Swing事件处理的过程是怎样的?

传智教育-一样的教育,不一样的品质

Swing组件中的事件处理专门用于响应用户的操作,例如,响应用户的单击鼠标、按下键盘等操作。在Swing事件处理的过程中,主要涉及到三类对象:

● 事件源(Event Source):事件发生的场所,通常就是产生事件的组件,例如窗口、按钮、菜单等。

● 事件对象(Event):封装了GUI组件上发生的特定事件(通常就是用户的一次操作)。

● 监听器(Listener):负责监听事件源上发生的事件,并对各种事件做出相应处理的对象(对象中包含事件处理器)。

上面提到的事件源、事件对象、监听器在整个事件处理过程中都起着非常重要的作用,它们彼此之间有着非常紧密的联系。接下来用一个图例来描述事件处理的工作流程,如图1所示。

图1 事件处理流程图

在图1中,事件源是一个组件,当用户进行一些操作时,如按下鼠标或者释放键盘等,都会触发相应的事件,如果事件源注册了监听器,则触发的相应事件将会被处理。

接下来,通过一个案例来演示Swing中的事件处理,如文件1所示。

文件1 Example06.java

     import java.awt.event.*;
     import javax.swing.*;
     // 自定义事件监听器类
     class MyListener implements ActionListener{
         // 实现监听器方法,对监听事件进行处理
         public void actionPerformed(ActionEvent e) {
             System.out.println("用户点击了JButton按钮组件");
         }
     }
     public class Example06 {
         private static void createAndShowGUI() {
             JFrame f = new JFrame("JFrame窗口");
             f.setSize(200, 100); 
             // 创建一个按钮组件,作为事件源
             JButton btn = new JButton("按钮");  
             // 为按钮组件事件源添加自定义监听器
             btn.addActionListener(new MyListener());
             f.add(btn);
             f.setVisible(true);
             f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         }
         public static void main(String[] args) {
             // 使用SwingUtilities工具类调用createAndShowGUI()方法并显示GUI程序
             SwingUtilities.invokeLater(Example06::createAndShowGUI);
         }
     }

运行结果如图2所示。

事件处理机制

图2 运行结果

单击图2中的按钮组件,查看控制台,显示输出结果如图3所示。

图3 运行结果

文件1中,在JFrame窗口中添加了一个JButton按钮组件,同时通过addActionListener()方法为按钮组件添加了一个自定义事件监听器,当单击按钮组件时就会触发事件监听器,进行事件处理。

从上面的程序可以看出,实现Swing事件处理的主要步骤如下:

(1)创建事件源:除了一些常见的按钮、键盘等组件可以作为事件源外,包括JFrame窗口在内的顶级容器也可以作为事件源;

(2)自定义事件监听器:根据要监听的事件源创建指定类型的监听器进行事件处理,该监听器是一个特殊的Java类,必须实现XxxListener接口(根据组件触发的动作进行区分,如WindowListener用于监听窗口事件,ActionListener用于监听动作事件);

(3)为事件源注册监听器:使用addXxxListener()方法为指定事件源添加特定类型的监听器。当事件源上发生监听的事件后,就会触发绑定的事件监听器,然后由监听器中的方法进行相应处理。

Swing有几种常用的事件处理方式?如何监听事件?

Swing JDialog容器和JFrame容器使用教程

Java swing是做什么的?有什么作用?

传智教育Java高级软件工程师培训

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/java/253879.html

(0)
上一篇 2022年5月9日 03:10
下一篇 2022年5月9日 03:15

相关推荐

发表回复

登录后才能评论