為SWT文本控件添加彈出式內(nèi)容輔助
Posted on 2007-11-02 17:28 寒武紀(jì) 閱讀(2401) 評(píng)論(5) 編輯 收藏 所屬分類(lèi): SWT/JFace 通常情況下,用戶(hù)應(yīng)該在簡(jiǎn)單字段(例如文本字段或組合框)中提供文本信息。雖然用來(lái)填充這些字段的應(yīng)用程序代碼通常比用來(lái)填充復(fù)雜窗口小部件(例如表或樹(shù))的代碼簡(jiǎn)單得多,但這些“簡(jiǎn)單”字段通常會(huì)給用戶(hù)帶來(lái)更多負(fù)擔(dān)。用戶(hù)必須確定哪些字段需要內(nèi)容、某個(gè)字段是否包含有效內(nèi)容以及應(yīng)該選擇哪些選項(xiàng)。JFace 的字段輔助支持提供了一些類(lèi)來(lái)幫助指導(dǎo)用戶(hù)完成輸入任務(wù)。
org.eclipse.jface.fieldassist包提供了二種方式的輔助。帶修飾字段支持允許您提供圖像修飾,以便向用戶(hù)提供有關(guān)特定字段狀態(tài)的提示。內(nèi)容建議支持允許您提供內(nèi)容輔助彈出窗口,以便向用戶(hù)提供內(nèi)容選項(xiàng)。
下面了解一下關(guān)于內(nèi)容建議部分。
一般的IDE工具都有內(nèi)容建議的功能,比如很常見(jiàn)的Java編輯器,輸入“.”之后就會(huì)激活一個(gè)窗口,從里面可以選擇方法或字段,這個(gè)功能可以快速高效地完成代碼,而且可以減少很多輸入錯(cuò)誤。jface的fieldassist提供了對(duì)這個(gè)功能的支持。
我們做一個(gè)demo,先看一下這個(gè)demo的效果。
當(dāng)按下Alt + '/'的時(shí)候,彈出內(nèi)容輔助的窗口。從中可以選擇相應(yīng)的建議,進(jìn)行快速輸入。
下面是相應(yīng)的代碼,非常簡(jiǎn)單。


















按照幫助文檔的描述如下:為了在用戶(hù)從彈出窗口中選擇建議時(shí)獲取和設(shè)置控件內(nèi)容,必須向適配器提供 IControlContentAdapter 實(shí)例,該實(shí)例可以檢索和設(shè)置特定類(lèi)型控件的內(nèi)容。對(duì)于文本字段來(lái)說(shuō),可以使用 TextContentAdapter 類(lèi)。但是,也可以靈活地實(shí)現(xiàn) IControlContentAdapter,以便將內(nèi)容建議適配器與任何其他類(lèi)型的控件配合使用。
關(guān)鍵是定義ContentProposalAdapter類(lèi),它有幾個(gè)必須的參數(shù),第一個(gè)是需要進(jìn)行內(nèi)容輔助的控件,第二個(gè)是IControlContentAdapter 實(shí)例,jface默認(rèn)提供了二個(gè)實(shí)現(xiàn):ComboContentAdapter, TextContentAdapter。按照上面的建議,如果你需要更加高級(jí)的功能,那么得實(shí)現(xiàn)IControlContentAdapter。第四個(gè)是IContentProposalProvider的實(shí)例,這是提供內(nèi)容輔助窗口中的內(nèi)容提供器的接口,jface只實(shí)現(xiàn)了一個(gè)SimpleContentProposalProvider,這是最簡(jiǎn)單的只提供文本內(nèi)容的內(nèi)容提供器。同樣的,你可以繼承IContentProposalProvider來(lái)實(shí)現(xiàn)更高級(jí)的功能。
keyStroke是定義按下什么鍵時(shí)激活該提示。autoActivationCharacters是定義當(dāng)輸入遇到什么符號(hào)時(shí)會(huì)激活提示的字符數(shù)組。
按照幫助文檔的說(shuō)明,可以在任意控件上安裝 ContentProposalAdapter 以提供此行為。需要什么樣的高級(jí)功能,就必須具體實(shí)踐一下以上幾個(gè)接口的實(shí)現(xiàn)。一般的編輯器都會(huì)配合SoucreViewer來(lái)提供這些功能。
剛進(jìn)場(chǎng)的時(shí)候戲就落幕