使用PropertyChangeSupport/PropertyChangeListener监控变量

来源:互联网 发布:淘宝晒图 编辑:程序博客网 时间:2024/05/21 03:25
使用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() {                                           }                                                                          }                                                                              

                                 

0 0
原创粉丝点击