<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 | 三告習習
    例子寫得太繁雜,會讓不熟悉的新手看到摸不著頭。
    喜歡將例子簡化,這樣也可以讓自己的思路清晰,要擴展也是挺方便的  回復  更多評論
      
    主站蜘蛛池模板: 久久久久久国产精品免费无码| 2019中文字幕免费电影在线播放| AV在线播放日韩亚洲欧| 精品国产污污免费网站入口| 亚洲国产精品久久久久网站 | 亚洲精品无码你懂的| 国产一级大片免费看| 免费黄网站在线看| 自拍偷区亚洲国内自拍| 国产偷国产偷亚洲高清日韩| 8x8×在线永久免费视频| 亚洲av片在线观看| 亚洲av中文无码乱人伦在线播放| 麻豆高清免费国产一区| 国产亚洲综合精品一区二区三区| 国产v亚洲v天堂无码网站| 欧美大尺寸SUV免费| 2022免费国产精品福利在线| 精品久久久久久亚洲精品| 久久亚洲国产成人影院网站 | 永久免费无码网站在线观看| 国产色爽免费无码视频| 亚洲AV无码一区二区大桥未久| 亚洲人成电影福利在线播放| 国产一级一片免费播放i| 亚洲第一网站免费视频| 一区在线免费观看| 国产亚洲精品影视在线| 亚洲av福利无码无一区二区| 免费中文字幕在线| 在线视频免费观看高清| 免费在线观看一级片| 日本高清免费中文在线看| 亚洲人av高清无码| 亚洲精品在线免费看| 亚洲精品乱码久久久久久中文字幕| 日韩免费一区二区三区| 99精品在线免费观看| 一级有奶水毛片免费看| 羞羞视频在线免费观看| 99久久国产亚洲综合精品|