使用PropertyChangeSupport/PropertyChangeListener监控变量

使用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() {                                           
	}                                                                          
}                                                                              

                                 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值