亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

拖放 Eclipse Workbench 標簽

2019-11-18 13:40:15
字體:
來源:轉載
供稿:網友

  在本文中,我們將學習一種通過編程定制 Eclipse 中的編輯器和視圖標簽的拖放行為的技術。我們使用了一個示例來展示這種技術,該示例將編輯器與轉移類型 org.eclipse.ui.part.EditorInputTransfer 進行關聯。可以通過實現對這種轉移類型的支持來支持編輯器的拖放行為。我們還為視圖標簽提供了一個類似的展示。本文假設您熟悉 SWT 的拖放技術。

  定制意味著什么?

  Eclipse Workbench 中的編輯器和視圖標簽可以支持默認拖放行為,默認拖放行為支持:
  • 視圖在 Workbench 內部的移動和停靠
  • 在有標簽的記事本內部重新安排視圖或編輯器的順序
  • 創建快速視圖
  • 為了并排查看源代碼,在編輯器區域并排顯示幾個編輯器

  盡管這是一個非常令人振奮的功能列表,但在我去年從事的一個項目中,仍然需要更多的功能。用戶需要能夠對編輯器和視圖標簽進行拖放,將它們放到一個非凡的視圖上。當用戶這樣做時,我們要做的是截獲所拖放編輯器的 editor-id 和 input,以及所拖放視圖的 view-id,然后在一個非凡的視圖中顯示相同的內容。下面的 圖 1 和 圖 2 將展示這種功能。

  圖 1 給出了一個標題為 .PRoject 的編輯器,該編輯器被拖放到一個標題為 Drop Window 的非凡視圖中。一旦拖放到如 圖 2 所示的位置處,這個非凡的視圖就會顯示所拖放編輯器的 editor-id 和 input。

圖 1. 正被拖放到非凡視圖中的編輯器標簽
拖放 Eclipse Workbench 標簽(圖一)

圖 2. 被拖放到非凡視圖上的編輯器標簽
拖放 Eclipse Workbench 標簽(圖二)

  與我們在這個項目中的要求類似,還可能存在其他一些需要對編輯器或視圖標簽的默認拖放行為進行定制的情況。例如,有人可能會希望答應 Eclipse 用戶將編輯器標簽從工作臺窗口中拖出,將它放到相同 Eclipse 實例的另外一個窗口中。本文中介紹的技術也可以在這種情況下使用。

  下面讓我們來學習定制拖放行為所涉及的步驟,具體地說,這些步驟是針對編輯器標簽的,但它們同樣適用于視圖標簽。 定制編輯器標簽的拖放行為

  當 Eclipse 用戶拖動一個編輯器標簽時,要實現如 圖 1 和 圖 2 所示的定制拖放功能,并內部執行以下兩個主要任務或操作:
  操作 1
捕捉底層編輯器的 IEditorInput 和 editor-id,前者包含有關正在編輯的文件的信息;后者包含有關編輯正在使用的編輯器的類型信息。
  操作 2
將 editor-input 和 editor-id 放到 EditorInputTransfer.EditorInputData 對象中,并將其設置為拖放過程中正在轉移的對象。這種操作可以讓 SWT 負責實現其余的拖放操作,例如將編輯器標簽放到使用 EditorInputTransfer 作為轉移類型的控件上。
  由于編輯器標簽通常放在 CTabFolder 容器中,因此我們需要為存放編輯器的 CTabFolder 容器創建一個 DragSource,并在這個 DragSource 的 dragSetData() 方法中執行 操作 1 和 操作 2。假設我們可以捕捉存放編輯器的 CTabFolder 容器,那么創建所需拖放源的任務就非常簡單,如下所示:

清單 1. 為 Tab folder 創建拖放源
CTabFolder tabFolder = <"CTabFolder" composite that hosts editor-parts>; int Operations = DND.DROP_COPY  DND.DROP_DEFAULT; DragSource dragSource = new DragSource(tabFolder, operations); Transfer[] transferTypes = new Transfer[] {EditorInputTransfer.getInstance()}; dragSource.setTransfer(transferTypes); dragSource.addDragListener(new DragSourceListener() {   public void dragStart(DragSourceEvent dsEvent) { }   public void dragSetData(DragSourceEvent dsEvent)   {     //code to perform operation-1 and operation-2   }   public void dragFinished(DragSourceEvent dsEvent) { } }); 

  此處另外一個非常重要的假設是:CTabFolder 容器并沒有已經創建好的拖放源。否則,代碼 DragSource dragSource = new DragSource(tabFolder, operations); 就會觸發一個 SWTError 錯誤,這是因為我們不能為同一個控件創建多個拖放源。

  要查看這種假設是否有效(這也是 清單 1 的一個可能用途),讓我們來看一下與這個編輯器標簽有關的默認拖放行為。默認的行為提示說存放這個編輯器標簽的 CTabFolder 容器可能早已為其創建了一個拖放源。然而,快速查看 org.eclipse.swt.custom.CTabFolder.java 的代碼可以看到,CTabFolder 的默認拖放操作都不是通過創建一個拖放源來實現的,而是通過為 SWT.DragDetect、SWT.MouseMove 和 SWT.MouseUp 類型的事件添加監聽程序來實現的。CTabFolder 容器還沒有創建拖放源的假設仍然有效,正如我們可以看到的一樣,這是基于查看非 API 內部類獲得的信息而作出的假設。因此,假如這種假設在將來的版本中無效,也不用感到驚異;不過我認為這種可能性非常小。

  下面讓我們來看一下如何捕捉存放編輯器的 CTabFolder 容器。通過對編輯器平鋪行為的觀察,我們注重到不管在何時平鋪顯示編輯器,都會創建一個新的 Tab 文件夾。另外,當一個標簽組中的所有編輯器全部關閉或被移動到一個不同的 Tab 文件夾上時,原來的 Tab 文件夾就會被銷毀。這意味著 CTabFolder 容器的創建和銷毀都是動態的,因此 CTabFolder 容器的拖放源的創建也應該是動態完成的。

  要實現這種功能,需要能夠對 CTabFolder 容器的創建進行控制。但是 Eclipse 并沒有提供任何可以在創建 CTabFolder 容器時進行回調的功能。另外一種方法是對 CTabFolders 進行非凡化 (specialize) 處理(繼續),繼續這些 specialized CTabFolders(繼續類,而不是基類 CTabFolder),并在這些 specialized CTabFolders 的 constrUCtors 中創建拖放源。然而,在 Eclipse 中實例化這些 specialized CTabFolders 是一項非常繁雜的任務,因此我們需要尋找一種新的解決方案。

  一種創建拖放源的新方法

  下面讓我們為 Display 添加一個拖放檢測監聽器(用來監聽 SWT.DragDetect 類型的事件),如下所示:

  清單 2. 為 Display 添加拖放監聽器


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美日韩第一区| 久久精品99国产精品酒店日本| 国产一区二区三区日韩欧美| 国产精品美女久久久久av超清| 国产精品高潮粉嫩av| 精品国产乱码久久久久酒店| 97在线视频精品| 欧美性xxxxx极品| 欧美国产亚洲精品久久久8v| www国产亚洲精品久久网站| 国语自产精品视频在线看一大j8| 奇米一区二区三区四区久久| 美女精品久久久| 精品福利免费观看| 国产精品网红福利| 亚洲日本中文字幕免费在线不卡| 欧美成人精品在线| 黑人狂躁日本妞一区二区三区| 51精品国产黑色丝袜高跟鞋| 亚洲精品suv精品一区二区| 精品偷拍一区二区三区在线看| 日本一区二区三区四区视频| 成人激情视频在线观看| 欧美日韩免费一区| 日本在线观看天堂男亚洲| 欧洲成人性视频| 国产精品免费视频久久久| 亚洲美女黄色片| 亚洲另类图片色| 九九热这里只有在线精品视| 一区三区二区视频| 日本久久久久久久久久久| 大荫蒂欧美视频另类xxxx| 成人在线视频福利| 午夜精品国产精品大乳美女| 欧美日韩一区免费| 国产精品免费一区二区三区都可以| 亚洲欧美另类人妖| 日韩av电影在线网| 日韩精品免费视频| 欧美激情亚洲国产| 性视频1819p久久| 国产精品激情自拍| 欧美性精品220| 欧美精品国产精品日韩精品| 国产在线视频2019最新视频| 日韩精品中文字幕视频在线| 久久久久久九九九| 久久视频中文字幕| 国产一区二区三区久久精品| 久久视频在线视频| 精品视频在线播放色网色视频| 三级精品视频久久久久| 欧美精品xxx| 国产精品网站视频| 国模吧一区二区| 久久精品99无色码中文字幕| 亚洲欧美日韩国产精品| 日本伊人精品一区二区三区介绍| 久久久精品一区二区| 免费99精品国产自在在线| 色黄久久久久久| 久久久久久久久久久免费精品| 国产99久久精品一区二区永久免费| 91精品国产91久久久久久吃药| 九九久久久久99精品| 热久久美女精品天天吊色| 精品久久久久人成| 成人精品一区二区三区| 久久69精品久久久久久国产越南| 欧美亚洲国产视频小说| 青青久久av北条麻妃黑人| 亚洲免费福利视频| 日韩av网站在线| 中文字幕欧美精品日韩中文字幕| 日韩欧美亚洲一二三区| 国产在线播放91| 久久99国产综合精品女同| 成人欧美一区二区三区在线湿哒哒| 91国产一区在线| 国产在线精品一区免费香蕉| 国产v综合v亚洲欧美久久| 国产成人精品电影| 国产精品美女av| 亚洲自拍高清视频网站| 欧美日韩ab片| 成人久久精品视频| 久久视频在线看| 国产性色av一区二区| 欧美在线播放视频| 亚洲欧美中文日韩在线| 欧美成人在线网站| 亚洲成人av中文字幕| 日韩精品极品在线观看播放免费视频| 一本一道久久a久久精品逆3p| 欧美色欧美亚洲高清在线视频| 国产一区二区三区高清在线观看| 亚洲精品免费一区二区三区| 精品无码久久久久久国产| 国产精品视频xxxx| 91精品国产色综合久久不卡98口| 上原亚衣av一区二区三区| 欧美亚洲午夜视频在线观看| 久久久久久久久久久国产| 久久中文字幕视频| 国产欧美在线看| 欧美性猛交xxxx乱大交3| 精品无人区乱码1区2区3区在线| 久久99精品视频一区97| 国产美女精品视频免费观看| 国产精品69av| 美女av一区二区三区| 91大神福利视频在线| 久久天天躁狠狠躁夜夜爽蜜月| 日韩中文视频免费在线观看| 久久久女女女女999久久| 日韩精品中文字幕久久臀| 日韩av在线资源| 成人精品久久一区二区三区| 日韩最新中文字幕电影免费看| 欧美在线激情网| 日韩精品极品在线观看| 97色伦亚洲国产| 亚洲美女久久久| 国内精品久久久久| 成人午夜在线影院| 欧美理论电影在线播放| 欧美激情中文字幕在线| 97在线视频免费播放| 亚洲欧美在线一区| 欧美成人合集magnet| 欧美精品激情视频| 欧美成年人网站| 成人黄色片网站| 精品久久国产精品| 亚洲精品第一页| 欧美专区在线视频| 91av在线国产| 国产精品美女久久久久久免费| 日韩在线视频二区| 视频在线观看一区二区| 精品美女永久免费视频| 国产剧情久久久久久| 欧美精品xxx| 国产精品678| 国产精品劲爆视频| 九九热精品视频| 久久精品国产欧美亚洲人人爽| 国产精品久久9| 日韩亚洲综合在线| 欧美国产极速在线| 欧美成人午夜免费视在线看片| 国产精品美女久久久久久免费| 成人h视频在线观看播放| 最近中文字幕mv在线一区二区三区四区| 亚洲无av在线中文字幕| 久久久久久美女| 69av成年福利视频| 日韩精品视频在线观看免费| 欧美日韩午夜视频在线观看| 69av在线视频| 色综合色综合网色综合| 国产日韩av在线| 国产在线一区二区三区|