国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

利用視圖鏈接使Eclipse應(yīng)用程序更豐富

2019-11-18 15:56:46
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  豐富的 GUI 中的視圖可以以各種方式顯示信息,從而改善用戶體驗(yàn)。非常自然,UI 視圖之間是相互依靠的,需要進(jìn)行交互。Eclipse 簡(jiǎn)化了鏈接 UI 視圖的工作,并提供了將視圖鏈接應(yīng)用到非 UI 場(chǎng)景的方式。

  簡(jiǎn)介

  Eclipse 平臺(tái)答應(yīng)使用可插入組件 —— 插件 —— 幫助創(chuàng)建豐富的圖形用戶界面(graphical user interface,GUI)應(yīng)用程序。例如,插件可以向 GUI 提供視圖。但是,在現(xiàn)實(shí)的應(yīng)用程序中,UI 視圖不能是孤立的。它們需要根據(jù)其他視圖的狀態(tài)進(jìn)行交互和對(duì)本身進(jìn)行更新。

  一個(gè)簡(jiǎn)單的例子是描述世界各地的主要旅游目的地的 GUI 應(yīng)用程序。這個(gè) GUI 可能有一個(gè) Select City 視圖,用于顯示旅游景點(diǎn)和公共交通信息。

利用視圖鏈接使Eclipse應(yīng)用程序更豐富
圖 1. 視圖鏈接的例子

  本文介紹在 Eclipse 中結(jié)合視圖的方式以及如何對(duì)其他視圖的狀態(tài)做出響應(yīng)。還討論鏈接視圖方式在哪些情況下可能比其他方式合適。

  Eclipse 開(kāi)發(fā)人員可以依靠以下方法對(duì)視圖進(jìn)行鏈接:

  選擇提供器 - 選擇監(jiān)聽(tīng)器(selection PRovider-selection listener)模式,從而讓視圖對(duì)其他視圖中的選擇做出反應(yīng)
  IAdaptable 接口,與某些事件結(jié)合使用
  屬性改變監(jiān)聽(tīng)器,它答應(yīng)視圖將屬性改變事件告之已注冊(cè)的監(jiān)聽(tīng)器

  選擇提供器 - 選擇監(jiān)聽(tīng)器范型

  選擇提供器 - 選擇監(jiān)聽(tīng)器模式能夠方便地創(chuàng)建對(duì)其他視圖中的改變做出響應(yīng)的視圖。例如,當(dāng)用戶點(diǎn)擊代表城市名的 UI 項(xiàng)時(shí),另一個(gè)視圖可能需要顯示這個(gè)城市的景點(diǎn)詳情。這樣的視圖可以使用 UI 選擇對(duì)象(可能是代表城市名的字符串對(duì)象)中包含的信息,并使用它從模型中獲取和顯示其他信息。

  視圖應(yīng)該能夠識(shí)別并利用 UI 選擇事件。org.eclipse.ui.ISelectionListener 是接收 UI 選擇事件的監(jiān)聽(tīng)器接口。選擇監(jiān)聽(tīng)器必須注冊(cè)到工作臺(tái)頁(yè)面。工作臺(tái)頁(yè)面實(shí)現(xiàn) org.eclipse.ui.ISelectionService 接口定義的服務(wù),從而將 UI 選擇事件告之監(jiān)聽(tīng)器。選擇監(jiān)聽(tīng)器必須注冊(cè)到選擇服務(wù)。

  用于顯示可選擇的 UI 項(xiàng)的視圖還應(yīng)該能夠公布 UI 選擇。視圖通過(guò)將 “選擇提供器” 注冊(cè)到它們各自的工作臺(tái)站點(diǎn)來(lái)實(shí)現(xiàn)這一點(diǎn)。Eclipse 中的每個(gè) UI 部分通過(guò) org.eclipse.ui.IWorkbenchPartSite 引用與工作臺(tái)站點(diǎn)聯(lián)絡(luò)。選擇提供器注冊(cè)到工作臺(tái)站點(diǎn)。

  在使用選擇提供器 - 選擇監(jiān)聽(tīng)器模式鏈接視圖時(shí),視圖可以將本身作為監(jiān)聽(tīng)器添加到工作臺(tái)頁(yè)面,而希望公布選擇的其他視圖必須將選擇提供器添加到它們各自的工作臺(tái)站點(diǎn)。org.eclipse.ui.ISelectionListener 接口如下所示。

public void selectionChanged(IWorkbenchPart part, ISelection selection);
  要使視圖能夠監(jiān)聽(tīng)選擇改變,視圖必須實(shí)現(xiàn) ISelectionListener 接口并必須將自己注冊(cè)到工作臺(tái)頁(yè)面。清單 1 顯示一個(gè)例子。

  清單 1. 將選擇監(jiān)聽(tīng)器添加到工作臺(tái)頁(yè)面

public class MyView extends ViewPart implements ISelectionListener{


public void createPartControl(Composite parent) {

// add this view as a selection listener to the workbench page
getSite().getPage().addSelectionListener((ISelectionListener) this);

}

// Implement the method defined in ISelectionListener, to consume UI selections
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
//Examine selection and act on it!
}

}
  使用 UI 選擇的更好的方法是,將消費(fèi)者視圖作為監(jiān)聽(tīng)器注冊(cè)到特定的視圖部分。正如在下面的例子中可以看到的,源視圖部分的視圖 ID 在注冊(cè)選擇監(jiān)聽(tīng)器期間被作為一個(gè)參數(shù)。

getSite().getPage().addSelectionListener("SampleViewId",(ISelectionListener)this);
  這種方式可以避免對(duì)消費(fèi)者視圖進(jìn)行多余的回調(diào),假如視圖被注冊(cè)為非特定的監(jiān)聽(tīng)器,就會(huì)出現(xiàn)這種情況。 清單 2 中的代碼片段顯示一個(gè)視圖的 createPartControl() 方法,這個(gè)方法創(chuàng)建一個(gè) JFace TableViewer 并將它作為選擇提供器添加到工作臺(tái)站點(diǎn)。這些代碼使 TableViewer 中的任何 UI 選擇改變能夠傳播到頁(yè)面,并最終傳播到對(duì)這種事件感愛(ài)好的消費(fèi)者視圖。

  清單 2. 設(shè)置選擇提供器

public void createPartControl(Composite parent) {
// Set up a JFace Viewer
viewer = new TableViewer(parent, SWT.MULTI SWT.H_SCROLL SWT.V_SCROLL);
viewer.setContentProvider(new ViewContentProvider());
viewer.setLabelProvider(new ViewLabelProvider());
viewer.setSorter(new NameSorter());
viewer.setInput(getViewSite());

// ADD the JFace Viewer as a Selection Provider to the View site.
getSite().setSelectionProvider(viewer);

}
  這個(gè)視圖將它創(chuàng)建的 JFace TableViewer 注冊(cè)為選擇提供器有兩個(gè)原因:

  這個(gè)視圖打算使用這個(gè) TableViewer 顯示信息,而且用戶將與 TableViewer 進(jìn)行交互。

  TableViewer 實(shí)現(xiàn)了選擇提供器接口并能夠向工作臺(tái)部分站點(diǎn)傳播選擇事件。

  因?yàn)?JFace 查看器是選擇提供器,所以在大多數(shù)情況下就不必創(chuàng)建選擇提供器了。視圖只需使用眾多的 JFace 查看器之一來(lái)顯示信息,并將 JFace 查看器注冊(cè)為選擇提供器。

  另一種鏈接方式

  某些情況需要另一種視圖鏈接方式:

  信息量可能太大,由于內(nèi)存使用量增加,UI 選擇對(duì)象無(wú)法有效地容納它。

  視圖可能希望公布其他信息,而不只是公布可視化選擇信息。公布的信息可能是根據(jù)選擇進(jìn)行某些后期處理的結(jié)果。

  視圖可能希望使用來(lái)自另一個(gè)插件的信息,而這個(gè)插件可能根本沒(méi)有提供視圖(使用包含的 JFace 查看器)。在這種情況下,使用基于 UI 選擇的鏈接是不可能的。

  可以使用 org.eclipse.core.runtime.IAdaptable 接口來(lái)緩解第一個(gè)問(wèn)題,這個(gè)接口使選擇對(duì)象能夠在需要時(shí)傳播更多信息。第二個(gè)和第三個(gè)問(wèn)題需要用手工方式解決,屬性改變監(jiān)聽(tīng)器模式是合適的解決方案。
  使用 IAdaptable 接口

  實(shí)現(xiàn) IAdaptable 接口的類(lèi)能夠動(dòng)態(tài)地返回某些類(lèi)型的適配器,然后可以使用這些適配器獲取更多信息。假如查看器中的選擇對(duì)象實(shí)現(xiàn)了 IAdaptable 接口,那么根據(jù)它們可以返回的適配器類(lèi)型,可以有效地獲取更多信息或相關(guān)信息。org.eclipse.core.runtime.IAdaptable 接口如下所示。



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 福州市| 海淀区| 额济纳旗| 来凤县| 思南县| 濮阳市| 满城县| 洛川县| 左云县| 华坪县| 安塞县| 鸡泽县| 南城县| 徐汇区| 江都市| 曲沃县| 克拉玛依市| 信阳市| 徐闻县| 呼伦贝尔市| 于田县| 吉水县| 铜川市| 阳城县| 宜宾市| 平遥县| 循化| 柳林县| 阿巴嘎旗| 越西县| 门头沟区| 南投县| 陆河县| 吉水县| 忻州市| 滦平县| 改则县| 乾安县| 竹溪县| 顺义区| 博湖县|