此Java教程是为JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
请参阅Java语言更改以获取Java SE 9及后续版本中更新的语言特性的摘要。
请参阅JDK发行说明以获取有关所有JDK版本的新功能、增强功能和已删除或弃用选项的信息。
更改监听器类似于属性更改监听器。更改监听器在一个对象上注册——通常是一个组件,但也可以是另一个对象,比如一个模型——当对象发生更改时,监听器会被通知。与属性更改监听器的一个重要区别是,更改监听器不会被通知发生了什么的更改,而只是简单地通知源对象已经发生了更改。因此,当只需要知道对象以任何方式发生了更改时,更改监听器非常有用。
几个 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
的源文件。
由于 ChangeListener
只有一个方法,所以它没有相应的适配器类。
方法 | 用途 |
---|---|
stateChanged(ChangeEvent) | 当被监听的组件更改状态时调用。 |
方法 | 用途 |
---|---|
Object getSource() (在 java.util.EventObject 中) |
返回触发事件的对象。 |
下表列出了使用变更监听器的示例。
示例 | 描述位置 | 注释 |
---|---|---|
SliderDemo 和SliderDemo2 |
如何使用滑块 | 在控制动画速度的滑块上注册变更监听器。变更监听器忽略变更事件,直到用户释放滑块。 |
ColorChooserDemo 和ColorChooserDemo2 |
如何使用颜色选择器 | 使用颜色选择器的选择模型上的变更监听器,以便在用户更改当前颜色时得知。 |
SpinnerDemo3 |
检测微调框值的变更 在 如何使用微调框中。 | 使用日期字段微调框上的变更监听器,在微调框的日期变更时改变文本颜色。 |
SpinnerDemo4 |
检测微调框值的变更 在 如何使用微调框中。 | 使用微调框上的变更监听器,在微调框的值变更时循环显示灰度。 |
ConverterRangeModel 和它的子类, FollowerRangeModel |
如何使用模型 | 为在Converter 演示中使用的滑块实现自定义模型。这两个模型在必要时显式触发变更事件。 |