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

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

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

    邋遢居

    我的Java天堂

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      61 Posts :: 2 Stories :: 90 Comments :: 0 Trackbacks

    SWT控件中托拽對象到GEF編輯器中

    一般情況下GEF程序都是采用如下的界面:


    gef.jpg

    新建對象的操作時通過拖拽Palette中元素到編輯而獲得。但是有時候可能需要從SWT,操作系統(tǒng)拖一些元素到GEF編輯器中來。

    下面我就把創(chuàng)建這樣的拖拽過程大概的描述一下:

    1、定義拖拽源(DragSource)。

    2、定義拖拽目標(biāo)的監(jiān)聽(DropTarget)。

    到這里對于一般的拖拽其實是可以完工了。

    這個部分可以參考weidagang2046的專欄的《DND入門學(xué)習(xí)

    但是要能讓GraphicalViewer這個對象扮演起DropTarget我們還需要做點其他的工作。GraphicalViewer這個類本身提供了一個addDropTargetListener方法。看到這個方法是不是一陣狂喜啊。如果有也是應(yīng)該的,因為這個方法就是我們解決前面提出問題的關(guān)鍵。

    好了看看他的聲明吧!

    				
    						
    								public void addDropTargetListener(TransferDropTargetListener?listener)
    						
    				
    		

    他這個參數(shù)居然不是 DropTargetListener 。這個 TransferDropTargetListener 是一個什么玩意啊!

    help 中查到:

    public interface TransferDropTargetListener
    extends TransferDropTargetListener

    A DropTragetListener that handles one type of SWT Transfer. The purpose of a TransferDropTargetListener is to:

    • Determine enablement for a Drop operation. Enablement is often a function drop location, and/or criteria.

    • When enabled, optionally showing feedback on the DropTarget.

    • Performing the actualy Drop

    DelegatingDropAdapter allows these functions to be implemented separately for unrelated types of Drags. DelegatingDropAdapter then combines the function of each TransferDropTargetListener, while allowing them to be implemented as if they were the only DragSourceListener.

    偷下懶,就不翻譯了。

    創(chuàng)建如下類來實現(xiàn)這個接口:

    public class TreeNodeTransferDropTargetListener extends

    AbstractTransferDropTargetListener {


    public TreeNodeTransferDropTargetListener(EditPartViewer editPartViewer) {

    // 改類默認(rèn)是處理 TextTransfer 類型的拖拽事件

    super (editPartViewer,TextTransfer.getInstance());

    // TODO Auto-generated constructor stub

    }


    @Override

    protected void updateTargetRequest() {

    }


    }

    我們這個拖拽想是讓他執(zhí)行一個 create 命令。所以下面就是要重載他的 createTargetRequest() 用來處理 create 對象的請求( CreateRequestion )。 CreateRequetion 需要使用到一個類,幫助我們創(chuàng)建對象的工廠類。 GEF 給了我們這樣的一個接口 CreationFactory 。下面我們?nèi)崿F(xiàn)他就好了。


    package org.eclipse.gef.examples.shapes.rcp.views;


    import org.eclipse.gef.examples.shapes.model.EllipticalShape;

    import org.eclipse.gef.requests.CreationFactory;


    public class TypeCreationFactory implements CreationFactory {


    public Object getNewObject() {

    // TODO Auto-generated method stub

    EllipticalShape label = new EllipticalShape();

    return label;

    }


    public Object getObjectType() {

    return EllipticalShape. class ;

    }


    }


    注意:這里的 getNewObject 是返回要創(chuàng)建類的一個對象實例。 GetObjectType 需要返回需要創(chuàng)建對象的類。這個可不要搞反了。

    這樣我們就可以把我們的 TreeNodeTransferDropTargetListener 類中的 createTargetRequest 方法加上了。


    private TypeCreationFactory factory = new TypeCreationFactory();

    protected Request createTargetRequest() {

    CreateRequest request = new CreateRequest();

    request.setFactory( factory );

    return request;

    }


    好了這個時候不要客氣了,加上

    protected void handleDragOver() {

    getCurrentEvent(). detail = DND. DROP_MOVE |DND. DROP_COPY ;

    super .handleDragOver();

    }


    @Override

    protected void handleDrop() {

    //String s = (String)getCurrentEvent().data;

    //factory.setText(s);

    super .handleDrop();

    }

    這樣的方法吧。

    這樣這個功能就完成了。


    參考文獻:

    http://m.tkk7.com/weidagang2046/archive/2006/09/05/67707.html

    http://www.eclipse.org/articles/Article-GEF-dnd/GEF-dnd.html


    posted on 2006-09-12 17:16 Jet Geng 閱讀(3504) 評論(7)  編輯  收藏 所屬分類: EclipseGEF

    Feedback

    # re: 從SWT控件中托拽對象到GEF編輯器中 2006-12-29 15:27 過客[匿名]
    如何將視圖中TreeViewer的節(jié)點(每個節(jié)點都有相應(yīng)的模型對應(yīng))拖入到編輯器中呢?  回復(fù)  更多評論
      

    # re: 從SWT控件中托拽對象到GEF編輯器中 2006-12-29 16:31 過客[匿名]
    org.eclipse.gef.examples.shapes.model.EllipticalShape,這個包在哪個jar下面,我一直沒有找到,而且在plugin.xml中的"依賴項"中導(dǎo)入了 org.eclipse.gef.examples.shapes,但是,確沒有EllipticalShape這個類.  回復(fù)  更多評論
      

    # re: 從SWT控件中托拽對象到GEF編輯器中 2007-01-02 21:39 Jet Geng
    org.eclipse.gef.examples.shapes.model.EllipticalShape 這個是org.eclipse.gef.examples.shapes中的模型。你在這里http://dev.eclipse.org/viewcvs/indextools.cgi/org.eclipse.gef.examples.shapes/src/org/eclipse/gef/examples/shapes/model/
    可以看到這個類  回復(fù)  更多評論
      

    # re: 從SWT控件中托拽對象到GEF編輯器中 2007-01-02 21:44 Jet Geng
    @過客[匿名]
    你可以看看
    http://www.eclipse.org/articles/Article-GEF-dnd/GEF-dnd.html 中的代碼  回復(fù)  更多評論
      

    # re: 從SWT控件中托拽對象到GEF編輯器中 2007-01-04 17:28 過客[匿名]
    多謝,examples例子我從CVS下載過來了

    對了,你寫的那兩個類主要實現(xiàn)從SWT,操作系統(tǒng)拖一些元素到GEF編輯器中來吧;我按你的例子copy了一份,把handleDragOver和handleDrop方法,加在TreeNodeTransferDropTargetListener類中

    在 ShapesEditor 的configureGraphicalViewer()方法中加入,
    viewer.addDropTargetListener(new TreeNodeTransferDropTargetListener(viewer));

    可是還是不能實現(xiàn)元素能拖入到編輯器中啊  回復(fù)  更多評論
      

    # re: 從SWT控件中托拽對象到GEF編輯器中 2007-01-22 15:46 過客[匿名]
    TextTransfer類型,可以用別的類型么?如支持圖片拖放  回復(fù)  更多評論
      

    # re: 從SWT控件中托拽對象到GEF編輯器中[未登錄] 2007-08-14 09:51 fly
    在哪里下載例子源碼呀  回復(fù)  更多評論
      

    主站蜘蛛池模板: 2021精品国产品免费观看| 亚洲一卡2卡三卡4卡无卡下载 | 一级做a爱过程免费视频高清| 日韩亚洲人成网站| 粉色视频在线观看www免费| MM1313亚洲国产精品| 春暖花开亚洲性无区一区二区| 久久亚洲精品无码gv| 高潮毛片无遮挡高清免费视频| 一级女性全黄久久生活片免费| 人与动性xxxxx免费| 久久WWW免费人成—看片| 99久久婷婷免费国产综合精品| 国产精品免费福利久久| 99ee6热久久免费精品6| 免费黄色网址网站| 真人做A免费观看| 成人免费毛片视频| 波多野结衣中文一区二区免费| 亚洲VA综合VA国产产VA中| 亚洲五月午夜免费在线视频 | 4虎1515hh永久免费| 免费福利网站在线观看| 免费黄色大片网站| 一本色道久久88综合亚洲精品高清| 亚洲第一黄色网址| 久久夜色精品国产亚洲| 亚洲黄色网址在线观看| 亚洲香蕉久久一区二区| 亚洲欧美日韩中文字幕一区二区三区| 麻豆亚洲AV成人无码久久精品| 国产精品黄页免费高清在线观看| 免费看搞黄视频网站| 免费看男女下面日出水来| 国产美女无遮挡免费网站| 久久精品亚洲福利| 久久久久久亚洲AV无码专区| 一区二区亚洲精品精华液| 特a级免费高清黄色片| 久久综合国产乱子伦精品免费| 国产精品无码免费播放|