<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>


    隨筆-35  評論-97  文章-0  trackbacks-0

    java.beans.PropertyChangeSupport通過注冊PropertyChangeListener可以令屬性在運行或者設計時被修改后,可以自動地通知外部世界。

    java.beans.VetoableChangeSupport通過注冊VetoableChangeListener有能力拒絕被設置為某個數值的屬性。如果fireVetoableChange方法拋出了一個PropertyVetoException例外,就表明監聽者已經拒絕了屬性的改變,屬性改變將不會生效。

    例子很簡單,看看就會明白,不多寫解釋了,看例子吧!

     

    一個Bean類

    import java.beans.PropertyChangeListener;
    import java.beans.PropertyChangeSupport;
    import java.beans.PropertyVetoException;
    import java.beans.VetoableChangeListener;
    import java.beans.VetoableChangeSupport;


    public class SomeBean
    {
        
    protected PropertyChangeSupport propertySupport; //屬性改變通知支持
        protected VetoableChangeSupport vetoableChangeSupport; //反對屬性改變支持
        private String changableValue;


        
    public SomeBean()
        
    {
            propertySupport 
    = new PropertyChangeSupport(this);//使本對象有屬性改變通知監聽器的能力
            vetoableChangeSupport = new VetoableChangeSupport(this);////使監聽器有反對本對象屬性改變的能力
            
    //這里添加支持與象使用observer模式的實現接有口異曲同工之效
        }



        
    public void setChangableValue(String newValue) throws PropertyVetoException
        
    {
            String oldValue;
            
    if((null == changableValue) || !changableValue.equals(newValue))
            
    {
                oldValue 
    = changableValue;
                changableValue 
    = newValue;
                vetoableChangeSupport.fireVetoableChange(
    "changableValue", oldValue, newValue);//這個在前
                propertySupport.firePropertyChange("changableValue", oldValue, newValue);//這個在后
                
    //如果兩個監聽器的次序調過來,你想想會有什么問題?你期待的效果沒有達到哦~~~~~~~~~~~~~~~
            }

        }



        
    public void addPropertyChangeListener(PropertyChangeListener listener)
        
    {
            propertySupport.addPropertyChangeListener(listener);
        }



        
    public void removePropertyChangeListener(PropertyChangeListener listener)
        
    {
            propertySupport.removePropertyChangeListener(listener);
        }



        
    public void addVetoableChangeListener(VetoableChangeListener listener)
        
    {
            vetoableChangeSupport.addVetoableChangeListener(listener);
        }



        
    public void removeVetoableChangeListener(VetoableChangeListener listener)
        
    {
            vetoableChangeSupport.removeVetoableChangeListener(listener);

        }



        
    public String getChangableValue()
        
    {
            
    return changableValue;
        }


    }

     

    一個監聽器(這里為了方便,把兩種監聽職能寫在一個類中)

    import java.beans.PropertyChangeEvent;
    import java.beans.PropertyChangeListener;
    import java.beans.PropertyVetoException;
    import java.beans.VetoableChangeListener;


    public class SomeBeanPropertyListener implements PropertyChangeListener,VetoableChangeListener
    {
        
    public void propertyChange(PropertyChangeEvent evt)
        
    {
            System.out.println(
    "\""+evt.getNewValue() +"\" is setted to replace the old value \""+evt.getOldValue()+"\"");
        }


        
    public void vetoableChange(PropertyChangeEvent evt) throws PropertyVetoException
        
    {
            
    if(evt.getNewValue().equals("invalidValue")){
                System.out.println(
    "\""+evt.getNewValue() +"\" is try to replace the old value \""+evt.getOldValue()+"\"");
                
    throw new PropertyVetoException("What you set \"invalidValue\"is a invalid value! operate fail!", evt);
            }

        }

    }

     

    測試一下

    public class Test
    {
        
    public static void main(String[] args)
        
    {
            SomeBean someBean 
    = new SomeBean();
            someBean.addPropertyChangeListener(
    new SomeBeanPropertyListener());
            someBean.addVetoableChangeListener(
    new SomeBeanPropertyListener());
            
    try
            
    {
                someBean.setChangableValue(
    "someValue");
                someBean.setChangableValue(
    "anotherValue");
                someBean.setChangableValue(
    "invalidValue");
            }

            
    catch(PropertyVetoException e)
            
    {
                System.err.println(e.getMessage());
            }

        }

    }

     

    結果輸出:

    "someValue" is setted to replace the old value "null"
    "anotherValue" is setted to replace the old value "someValue"
    "invalidValue" is try to replace the old value "anotherValue"
    What you set 
    "invalidValue"is a invalid value! operate fail!
    posted on 2007-06-05 16:24 三告習習 閱讀(1516) 評論(2)  編輯  收藏 所屬分類: java/jdk

    評論:
    # re: [java 拾遺篇] JavaBean實現約束屬性簡單例 2007-06-05 16:40 | itge.ge
    JavaBean監聽器!例子很簡潔,思路很好!  回復  更多評論
      
    # re: [java 拾遺篇] JavaBean實現約束屬性簡單例 2007-06-05 16:53 | 三告習習
    例子寫得太繁雜,會讓不熟悉的新手看到摸不著頭。
    喜歡將例子簡化,這樣也可以讓自己的思路清晰,要擴展也是挺方便的  回復  更多評論
      
    主站蜘蛛池模板: 国产中文字幕免费| 成人电影在线免费观看| 色影音免费色资源| 久久久久亚洲av无码尤物| 一区二区在线免费视频| 亚洲Av无码乱码在线播放| 亚洲妇女无套内射精| 好男人视频在线观看免费看片| 亚洲免费电影网站| 在线观看免费人成视频| 亚洲剧场午夜在线观看| 国产福利在线免费| 亚洲日韩乱码中文字幕| 国产精品国产自线拍免费软件| 亚洲av无码偷拍在线观看| 国产又长又粗又爽免费视频| 曰批全过程免费视频免费看| 亚洲人成色77777在线观看大| 国产日韩久久免费影院| 久久久久久久综合日本亚洲 | 狠狠色伊人亚洲综合网站色| 无码乱肉视频免费大全合集 | 久久免费区一区二区三波多野| 亚洲国产美国国产综合一区二区 | 亚洲高清国产拍精品26U| 99精品视频在线免费观看| 亚洲国产综合自在线另类| 成人毛片免费视频| 青草青草视频2免费观看| 亚洲毛片αv无线播放一区| 久久久久久毛片免费播放| 亚洲愉拍一区二区三区| 亚洲高清最新av网站| 中文无码成人免费视频在线观看| 久久久无码精品亚洲日韩蜜臀浪潮| 最新欧洲大片免费在线 | 免费看又爽又黄禁片视频1000| 瑟瑟网站免费网站入口| 亚洲AV无码专区电影在线观看| 99精品国产免费久久久久久下载 | 成年女人毛片免费播放视频m|