如何编写变更监听器
变更侦听器类似于属性更改侦听器。更改侦听器注册在一个对象(通常是组件)上,但是它可以是另一个对象(例如模型),并且在对象发生更改时会通知侦听器。与属性更改侦听器的最大区别是,更改监听器不会被通知已更改了什么,而只是通知源对象已被更改。因此,当仅需要知道对象何时以任何方式更改时,更改侦听器最有用。
一些 Swing 组件(包括JTabbedPane,JViewPort)依赖于更改事件的基本功能-滑块,颜色 selectors 和微调器。要了解slider中的值何时更改,您需要注册一个更改侦听器。同样,您需要在color chooser上注册一个更改侦听器,以便在用户选择新颜色时得到通知。您在spinner上注册了一个更改侦听器,以便在微调器的值更改时得到通知。
这是滑块的更改事件处理代码的示例:
//...where initialization occurs:
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
只有一种方法,所以没有相应的适配器类.
Method | Purpose |
---|---|
stateChanged(ChangeEvent) | 当侦听组件更改状态时调用。 |
Method | Purpose |
---|---|
Object getSource() | |
(*在 java.util.EventObject *中) | 返回引发事件的对象。 |
使用变更侦听器的示例
下表列出了使用变更侦听器的示例。
Example | Where Described | Notes | |
---|---|---|---|
SliderDemo and | |||
SliderDemo2 | 如何使用滑块 | 在控制动画速度的滑块上注册更改侦听器。更改侦听器将忽略更改事件,直到用户释放滑块为止。 | |
ColorChooserDemo and ColorChooserDemo2 | 如何使用颜色 selectors | 在颜色 selectors 的选择模型上使用更改侦听器,以了解用户何时更改当前颜色。 | |
SpinnerDemo3 | 如何使用微调器中的检测微调器值变化。 | 在日期字段微调器上使用更改侦听器,以在微调器的日期更改时更改文本的颜色。 | |
SpinnerDemo4 | 如何使用微调器中的检测微调器值变化。 | 使用微调器上的更改侦听器,以在微调器的值更改时在灰度级中循环。 | |
ConverterRangeModel 及其子类, FollowerRangeModel | 如何使用模型 | 为Converter演示中使用的滑块实现定制模型。两种模型都在必要时明确触发变更事件。 |