<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 三告習習 閱讀(1505) 評論(2)  編輯  收藏 所屬分類: java/jdk

    評論:
    # re: [java 拾遺篇] JavaBean實現約束屬性簡單例 2007-06-05 16:40 | itge.ge
    JavaBean監聽器!例子很簡潔,思路很好!  回復  更多評論
      
    # re: [java 拾遺篇] JavaBean實現約束屬性簡單例 2007-06-05 16:53 | 三告習習
    例子寫得太繁雜,會讓不熟悉的新手看到摸不著頭。
    喜歡將例子簡化,這樣也可以讓自己的思路清晰,要擴展也是挺方便的  回復  更多評論
      
    主站蜘蛛池模板: 高清免费久久午夜精品| 成人免费一区二区三区| 亚洲 国产 图片| 好湿好大好紧好爽免费视频 | 免费无码AV电影在线观看| 亚洲成AV人片高潮喷水| 成人午夜亚洲精品无码网站| 久久国产乱子伦精品免费一| 中文字幕在线日亚洲9| 亚洲国产精品激情在线观看| 无码免费一区二区三区免费播放 | 青柠影视在线观看免费高清| 亚洲五月综合网色九月色| 亚洲AⅤ无码一区二区三区在线| 久久aa毛片免费播放嗯啊| 亚洲性色精品一区二区在线| 国产亚洲色视频在线| 0588影视手机免费看片| 成人免费网站视频www| 91亚洲性爱在线视频| 不卡一卡二卡三亚洲| 67194成是人免费无码| 免费无码作爱视频| 无码色偷偷亚洲国内自拍| 亚洲图片在线观看| 亚洲欧洲日产国码高潮αv| 中文字幕视频免费| 一级大黄美女免费播放| 亚洲色欲色欲www| 亚洲AV无码国产精品麻豆天美| 国产精品国产免费无码专区不卡| 日韩精品极品视频在线观看免费| 美女黄网站人色视频免费| 亚洲一级黄色大片| 亚洲男人的天堂在线播放| 国产亚洲精品免费视频播放| 日本免费的一级v一片| 100000免费啪啪18免进| 无码精品人妻一区二区三区免费看 | 亚洲国产精品视频| 成人免费视频一区|