JavaBean ,以前也有看过,和事件模式差不多,但在触发事件的时机不同,至于javabean的特性方面,,可以去googleg 一下
而javabean 的事件模型,和awt中的事件处理差不多,
删除事件监听-------->>>> 事件源(JavaBean) ------->> 添加事件监听
在setXXX()时,发出事件,
由相应的事件监听者来处理事件 。
,下面直接来看一个例子:
package org.com.javabean2;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class JbuttonTest implements ActionListener , PropertyChangeListener
{
JButtonBean jbb = new JButtonBean() ;
JButton jb = new JButton("Test") ;
JButton jb2 = new JButton("Test2") ;
public JbuttonTest()
{
JFrame jf = new JFrame("JButton Test");
jb.setPreferredSize(new Dimension(60,40)) ;
Container c = jf.getContentPane();
c.setLayout(new FlowLayout()) ;
jf.add(jb) ;
jf.add(jb2) ;
jb.addActionListener(this) ;
jb2.addActionListener(this) ;
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;
jf.setSize(300,400) ;
jbb.addPropertyChangeListener(this) ;
jbb.setOutString("你好") ;
jf.setVisible(true) ;
}
public static void main(String args[])
{
new JbuttonTest();
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == jb)
{
System.out.println(e.getSource().getClass());
System.out.println("Test1111....");
jbb.setOutString(jb2.getText()) ; // 重新调用 ; 当点两次时,就不会调用,当oldValue == newValue 时,就不会调用
}else if(e.getSource() == jb2)
{
System.out.println(e.getSource().getClass());
jbb.setOutString(jb.getText()) ; // 重新调用 ;
}
}
@Override
public void propertyChange(PropertyChangeEvent evt)
{
System.out.println("old value "+evt.getOldValue());
System.out.println("new value "+evt.getNewValue());
System.out.println("property name "+evt.getPropertyName());
}
}
package org.com.javabean2;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
/**
* 事件源
* @author Administrator
*
*/
public class JButtonBean
{
public JButtonBean()
{
super();
}
PropertyChangeSupport pcs = new PropertyChangeSupport(this) ;
private String outString ;
private final String FIRE_PROPERTY_CHANGE_LISTNERER = "outString";
public String getOutString() {
return outString;
}
public void setOutString(String outString) {
String oldString = this.outString ;
this.outString = outString;
pcs.firePropertyChange(FIRE_PROPERTY_CHANGE_LISTNERER, oldString, outString) ;
}
public synchronized void addPropertyChangeListener(PropertyChangeListener pc)
{
pcs.addPropertyChangeListener(pc) ;
}
public synchronized void removePropertyChangeListener(PropertyChangeListener pc )
{
pcs.removePropertyChangeListener(pc) ;
}
}
但对于java bean,还有其它的用法,个人觉得用事件也能替换javabean事件,不知道有没有高人知道,javabean的高级用法,或是在企业中是怎么用的,欢迎高手拍砖。
例如上面那个:
pcs.firePropertyChange(FIRE_PROPERTY_CHANGE_LISTNERER, oldString, outString) ;
在setOutString()中触发,如果写一个事件处理,把它放在相应的地方也能达到这种效果 。