使用PropertyChangeSupport/PropertyChangeListener监控变量
下面是SWT的一个简单示例,Bean是一个被监听对象,BeanListener是Bean的监听器:
package swt.PropertyChange.idesvo;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
public class Bean {
/** 被监控变量 */
private int property;
private PropertyChangeSupport support = new PropertyChangeSupport(this);
public void setProperty(int newValue) {
int oldValue = property;
property = newValue;
// 变量变化时,触发监听
support.firePropertyChange("property", oldValue, newValue);
}
/** 注册监听器 */
public void addPropertyChangeListener(PropertyChangeListener listener) {
support.addPropertyChangeListener(listener);
}
/** 移除监听器 */
public void removePropertyChangeListener(PropertyChangeListener listener) {
support.removePropertyChangeListener(listener);
}
}
package swt.PropertyChange.idesvo;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Scale;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Slider;
public class BeanListener extends Label implements PropertyChangeListener {
public BeanListener(Composite parent, int style) {
super(parent, style);
test.addPropertyChangeListener(this);// 注册监听
}
Bean test = new Bean();
/** 监听变化 */
public void propertyChange(PropertyChangeEvent evt) {
setText("OldValue: " + evt.getOldValue() + " NewValue: "
+ evt.getNewValue());
}
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
final BeanListener listener = new BeanListener(shell, SWT.None);
// Slider
final Slider slider = new Slider(shell, SWT.HORIZONTAL);
slider.setBounds(10, 10, 200, 20);
slider.setMinimum(0);
slider.setMaximum(100);
slider.setThumb(50);
slider.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
// 设置变量的变化
listener.test.setProperty(slider.getSelection());
}
});
// Scale
final Scale scale = new Scale(shell, SWT.HORIZONTAL);
scale.setBounds(10, 50, 200, 72);
scale.setMinimum(0);
scale.setMaximum(100);
scale.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
// 设置变量的变化
listener.test.setProperty(scale.getSelection());
}
});
listener.setBounds(10, 140, 300, 30);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
protected void checkSubclass() {
}
}