文档

Java™ 教程
隐藏目录
如何编写一个更改监听器
路径: 使用Swing创建GUI
教程: 编写事件监听器
章节: 实现常见事件的监听器

如何编写更改监听器

更改监听器类似于属性更改监听器。更改监听器在一个对象上注册——通常是一个组件,但也可以是另一个对象,比如一个模型——当对象发生更改时,监听器会被通知。与属性更改监听器的一个重要区别是,更改监听器不会被通知发生了什么的更改,而只是简单地通知源对象已经发生了更改。因此,当只需要知道对象以任何方式发生了更改时,更改监听器非常有用。

几个 Swing 组件(包括JTabbedPane、JViewPort)依赖于更改事件进行基本功能——滑块、颜色选择器和微调器。要了解何时滑块中的值更改,需要注册更改监听器。同样,需要在颜色选择器上注册更改监听器,以便在用户选择新颜色时得到通知。在微调器上注册更改监听器,以便在微调器的值更改时得到通知。

这里是一个处理滑块的更改事件的代码示例:

//...初始化代码处:
framesPerSecond.addChangeListener(new SliderListener());
...
class SliderListener implements ChangeListener {
    public void stateChanged(ChangeEvent e) {
        JSlider source = (JSlider)e.getSource();
        if (!source.getValueIsAdjusting()) {
            int fps = (int)source.getValue();
            ...
        }    
    }
}

你可以在Swing 组件使用示例索引中找到 SliderDemo 的源文件。

更改监听器 API

更改监听器接口

由于 ChangeListener 只有一个方法,所以它没有相应的适配器类。

方法 用途
stateChanged(ChangeEvent) 当被监听的组件更改状态时调用。

更改事件类

方法 用途
Object getSource()
(java.util.EventObject)
返回触发事件的对象。

使用变更监听器的示例

下表列出了使用变更监听器的示例。

示例 描述位置 注释
SliderDemo
SliderDemo2
如何使用滑块 在控制动画速度的滑块上注册变更监听器。变更监听器忽略变更事件,直到用户释放滑块。
ColorChooserDemo
ColorChooserDemo2
如何使用颜色选择器 使用颜色选择器的选择模型上的变更监听器,以便在用户更改当前颜色时得知。
SpinnerDemo3 检测微调框值的变更如何使用微调框中。 使用日期字段微调框上的变更监听器,在微调框的日期变更时改变文本颜色。
SpinnerDemo4 检测微调框值的变更如何使用微调框中。 使用微调框上的变更监听器,在微调框的值变更时循环显示灰度。
ConverterRangeModel
和它的子类,
FollowerRangeModel
如何使用模型 为在Converter演示中使用的滑块实现自定义模型。这两个模型在必要时显式触发变更事件。

上一页:如何编写一个Caret监听器
下一页:如何编写一个组件监听器