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

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

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

    posts - 36, comments - 30, trackbacks - 0, articles - 3

    流程設計器開發九(屬性頁部分)

    Posted on 2008-01-14 08:59 笑看人生 閱讀(2038) 評論(5)  編輯  收藏 所屬分類: Java插件開發

    這一節主要介紹如何給編輯器增加屬性頁,屬性頁主要用來顯示編輯器中選中對象的屬性的,比如在編輯器選中活動,可以在屬性頁上顯示活動的大小和位置等信息,要實現這一功能,首先要讓模型實現IPropertySource接口,我們讓模型的基類ModelElement實現這個接口,基類要實現這接口中六個方法,這六個方法如下:


    /** An empty property descriptor. */
           
    private static final IPropertyDescriptor[] EMPTY_ARRAY = new IPropertyDescriptor[0];
    /**
            * Returns a value for this property source that can be edited in a property sheet.   

          
            * 
    @return this instance
            
    */

           
    public Object getEditableValue() {         
                  
    return this;
           }

           
    /**
            * Children should override this. The default implementation returns an empty array.
            
    */

           
    public IPropertyDescriptor[] getPropertyDescriptors() {           
                  
    return EMPTY_ARRAY;
           }

           
           
    /**
            * Children should override this. The default implementation returns null.
            
    */

           
    public Object getPropertyValue(Object id) {
                  
    // TODO Auto-generated method stub
                  return null;
           }

           
           
    /**
            * Children should override this. The default implementation returns false.
            
    */

           
    public boolean isPropertySet(Object id) {
                  
    // TODO Auto-generated method stub
                  return false;
           }

           
    /**
            * Children should override this. The default implementation does nothing.
            
    */

           
    public void resetPropertyValue(Object id) {
                  
    // TODO Auto-generated method stub
                  
           }

           
    /**
            * Children should override this. The default implementation does nothing.
            
    */

           
    public void setPropertyValue(Object id, Object value) {
                  
    // TODO Auto-generated method stub
                  
           }

    這六個方法的含義在JavaDoc中已經說的很清楚了,在這個類中我們還定義了IPropertyDescriptor類型的數組,這個數組的作用是存放要顯示屬性的名稱,由于根模型沒有什么可顯示的屬性,所以為空。當我們在編輯器中選中活動時,在屬性頁上要顯示它的屬性,因此我們應該在AbstractActivity類中覆蓋父類中相應的方法,代碼如下:

    /** 
            * 活動要顯示屬性的名稱
            * There is one IPropertyDescriptor entry per editable property.
            * 
    @see #getPropertyDescriptors()
            * 
    @see #getPropertyValue(Object)
            * 
    @see #setPropertyValue(Object, Object)
            
    */

           
    private static IPropertyDescriptor[] descriptors;
           
    /*
            * Initializes the property descriptors array.
            * @see #getPropertyDescriptors()
            * @see #getPropertyValue(Object)
            * @see #setPropertyValue(Object, Object)
            
    */

           
    static {
                  descriptors 
    = new IPropertyDescriptor[] 
                                
    new TextPropertyDescriptor(XPOS_PROP, "X"), // id and 

    description pair
                                
    new TextPropertyDescriptor(YPOS_PROP, "Y"),
                                
    new TextPropertyDescriptor(WIDTH_PROP, "Width"),
                                
    new TextPropertyDescriptor(HEIGHT_PROP, "Height")
                                
                  }
    ;
                  
    // use a custom cell editor validator for all four array entries
                  for (int i = 0; i < descriptors.length; i++{
                         
                                ((PropertyDescriptor) descriptors[i]).setValidator(
    new 

    ICellEditorValidator() 
    {
                                       
    public String isValid(Object value) {
                                              
    int intValue = -1;
                                              
    try {
                                                     intValue 
    = Integer.parseInt((String) 

    value);
                                              }
     catch (NumberFormatException exc) {
                                                     
    return "Not a number";
                                              }

                                              
    return (intValue >= 0? null : "Value must be >= 

    0";
                                       }

                                }
    );
                         }
                       
                                       
           }
     // static
           /**
            * Returns an array of IPropertyDescriptors for this AbstractActivity.
            * <p>The returned array is used to fill the property view, when the edit-part 

    corresponding
            * to this model element is selected.</p>
            * 
    @see #descriptors
            * 
    @see #getPropertyValue(Object)
            * 
    @see #setPropertyValue(Object, Object)
            
    */

           
    public IPropertyDescriptor[] getPropertyDescriptors() {
                  
    return descriptors;
           }

     
           
    /**
            * Return the property value for the given propertyId, or null.
            * <p>The property view uses the IDs from the IPropertyDescriptors array 
            * to obtain the value of the corresponding properties.</p>
            * 
    @see #descriptors
            * 
    @see #getPropertyDescriptors()
            
    */

           
    public Object getPropertyValue(Object propertyId) {
                  
    if (XPOS_PROP.equals(propertyId)) {
                         
    return Integer.toString(location.x);
                  }

                  
    if (YPOS_PROP.equals(propertyId)) {
                         
    return Integer.toString(location.y);
                  }

                  
    if (HEIGHT_PROP.equals(propertyId)) {
                         
    return Integer.toString(size.height);
                  }

                  
    if (WIDTH_PROP.equals(propertyId)) {
                         
    return Integer.toString(size.width);
                  }

                  
    return super.getPropertyValue(propertyId);
           }

           
           
    /**
            * Set the property value for the given property id.
            * If no matching id is found, the call is forwarded to the superclass.
            * <p>The property view uses the IDs from the IPropertyDescriptors array to set the 

    values
            * of the corresponding properties.</p>      
            
    */

           
    public void setPropertyValue(Object propertyId, Object value) {
                  
    if (XPOS_PROP.equals(propertyId)) {
                         
    int x = Integer.parseInt((String) value);
                         setLocation(
    new Point(x, location.y));
                  }
     else if (YPOS_PROP.equals(propertyId)) {
                         
    int y = Integer.parseInt((String) value);
                         setLocation(
    new Point(location.x, y));
                  }
     else if (HEIGHT_PROP.equals(propertyId)) {
                         
    int height = Integer.parseInt((String) value);
                         setSize(
    new Dimension(size.width, height));
                  }
     else if (WIDTH_PROP.equals(propertyId)) {
                         
    int width = Integer.parseInt((String) value);
                         setSize(
    new Dimension(width, size.height));
                  }
     else {
                         
    super.setPropertyValue(propertyId, value);
                  }

           }


    我們首先定義一個IPropertyDescriptor類型的數組,然后初始化這個數組,該數組存放要顯示活動的屬性,這里我們顯示活動圖形的坐標,大小屬性,由于屬性頁既能顯示屬性,還能編輯屬性,而坐標和大小屬性只能輸入數字,所以我們加入了校驗,如果給這些屬性輸入字符,就拋異常。getPropertyValue方法就是得到IPropertyDescriptor數組中對應屬性名的屬性值,setPropertyValue方法就是對屬性值進行修改時,要同時修改模型的屬性,讓模型通知控制器來刷新視圖,例如我們修改坐標x的值,編輯器中活動

    的位置就要發生改變,

    Feedback

    # re: 流程設計器開發九(屬性頁部分)  回復  更多評論   

    2008-01-14 15:50 by anone
    LZ辛苦了。。。研究中,向你學習。。。
    我看了 三中提供的代碼,不知如何運行才看到界面呢?
    現在有新的代碼提供下載嗎?

    # re: 流程設計器開發九(屬性頁部分)  回復  更多評論   

    2008-01-14 16:03 by anone
    現在正在研究中,要命啊。LZ能多給點資料嗎?謝謝了。我留郵箱吧:
    a_none@163.com

    # re: 流程設計器開發九(屬性頁部分)  回復  更多評論   

    2008-01-14 16:24 by 玩轉Java
    三中下載的代碼已經包含現在的內容了,要看到界面,只要把插件項目,運行為工作臺,載新建一個擴展名為workflow的文件,打開這個文件就可以看到效果了。在下一節,我將介紹如何通過向導來新建工作流文件。

    # re: 流程設計器開發九(屬性頁部分)  回復  更多評論   

    2008-01-15 17:21 by anone
    好的,謝謝LZ 了。。。

    # re: 流程設計器開發九(屬性頁部分)[未登錄]  回復  更多評論   

    2010-06-29 16:00 by 啊啊
    代碼一樣,屬性頁怎么就顯示不出來呢?
    主站蜘蛛池模板: 青青青亚洲精品国产| 中文字幕在线观看亚洲视频| 日本免费网址大全在线观看| 亚洲国产精品嫩草影院在线观看| 国产VA免费精品高清在线| 丁香亚洲综合五月天婷婷| 亚洲AV无码成人精品区日韩| 国产资源免费观看| 国产偷国产偷亚洲清高APP| 免费理论片51人人看电影| 亚洲a∨无码精品色午夜| 免费国产怡红院在线观看| 污视频网站在线观看免费| 亚洲精品天堂成人片?V在线播放| 成全视成人免费观看在线看| 亚洲a一级免费视频| 美女裸体无遮挡免费视频网站| 午夜亚洲国产成人不卡在线| 嫩草在线视频www免费看| 亚洲欧洲日本天天堂在线观看| 114一级毛片免费| 亚洲欧美熟妇综合久久久久| 亚洲成?v人片天堂网无码| 亚洲国产成+人+综合| 午夜私人影院免费体验区| 无码毛片一区二区三区视频免费播放 | 亚洲a∨无码一区二区| 亚洲国产精品无码久久青草| 在线观看免费无码视频| AV在线播放日韩亚洲欧| 日本亚洲欧洲免费天堂午夜看片女人员| 亚洲国产成人久久综合一 | 在线A级毛片无码免费真人 | 777亚洲精品乱码久久久久久| 青春禁区视频在线观看直播免费| 国产精品手机在线亚洲| 亚洲国产精品一区| 免费看的一级毛片| 亚洲免费观看视频| 亚洲AV综合色区无码一二三区| 我要看WWW免费看插插视频|