本节书摘来自华章计算机《Java数字图像处理:编程技巧与应用实践》一书中的第3章,第3.4节,作者 贾志刚,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
3.4 基本JButton事件响应
在学习JButton事件响应的知识之前,首先来看一下Swing中如何实现对用户事件的监听与处理,认识一下Swing中事件响应最重要的线程—事件分派线程。
在Swing中有一个特殊的线程被称为Swing事件分配线程,如果对UI组件的操作不在Swing事件分派线程中,Swing将抛出异常。检测当前线程是否为事件分派线程可以通过Swing本身提供的一个简单方法SwingUtilities.isEventDispatchThread()来完成。对Swing UI组件的刷新、重绘等必须都在事件分派线程中完成,这是因为Swing组件本身的设计不是线程安全的,所以通过一个特殊的线程—事件分派线程来实现对所有组件的更新与重绘,这样就保证了Swing组件操作的线程安全性。
JButton组件是Java Swing中实现用户交互最常用的组件,当用户单击对应的JButton组件时,Swing通过监听组件添加ActionListener对象实例,来实现对JButton组件单击事件的监听与响应处理,其响应处理则通过实现ActionListener接口的actionPerformed()方法来完成。很多时候,在单击JButton按钮以后,虽然有很多事情要做,但还是希望UI可以继续响应用户操作,这时可使用SwingWork来完成用户的操作并刷新UI显示。
在对Swing事件响应机制有初步了解以后,下面看一下在正式的项目编程中Swing如何实现对JButton事件监听与响应。其实现过程大致可以分为两步完成。
1)实现ActionListener接口,最常见的是由定义JButton组件的类来实现ActionListener接口。
2)根据ActionEvent.getActionCommand()得到的文本常量响应相应的用户操作。