Toggle Buttons(二)(二)

2014-11-24 00:34:47 · 作者: · 浏览: 1
istener = new ItemListener() { public void itemStateChanged(ItemEvent itemEvent) { int state = itemEvent.getStateChange(); if (state == ItemEvent.SELECTED) { System.out.println("Selected"); } else { System.out.println("Deselected"); } } };

使用ChangeListener监听JToggleButton事件

将ChangeListener关联到JToggleButton提供更多的灵活性。任意关联的监听器都会得到按钮数据模型变化的通知,响应armed, pressed以及selected属性的变化。由三个监听器监听通知-ActionListener, ItemListener以及ChangeListener-使得我们有七次不同的反应。

图5-3显示了ButtonModel属性变化序列,以及模型何时通知每个监听器。

Swing_5_3

为了演示ChangeListener通知,下面的代码片段定义了一个报告按钮模型三个属性状态变化的ChangeListener:

ChangeListener changeListener = new ChangeListener() {
public void stateChanged(ChangeEvent changeEvent) {
AbstractButton abstractButton = (AbstractButton)changeEvent.getSource();
ButtonModel buttonModel = abstractButton.getModel();
boolean armed = buttonModel.isArmed();
boolean pressed = buttonModel.isPressed();
boolean selected = buttonModel.isSelected();
System.out.println("Changed: " + armed + "/" + pressed + "/" + selected);
}
};
在我们将ChangeListener关联到JToggleButton之后并且通过组件之上的鼠标按下与释放选中组件时,输出结果如下:

Changed: true/false/false

Changed: true/true/false

Changed: true/true/true

Changed: true/false/true

Changed: false/false/true

将所有三个监听器关联到相同的按钮,已注册的ItemListener对象的通知将会在选中属性变化之后发生,换句说,在第3行与第4行之间。列表5-2演示了叛逆到相同的JToggleButton的所有三个监听器。考虑到已注册的ActionListener对象,通知发生在释放按钮之后,但是却在armed状态变为false之前,在第4行与第5行之间。

package swingstudy.ch04; import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener; import javax.swing.AbstractButton;
import javax.swing.ButtonModel;
im