javabean 的一个用法 && 二
?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()) ; // 重新调用 ; } } @Overridepublic 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()中触发,如果写一个事件处理,把它放在相应的地方也能达到这种效果 。
???
??
?