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

當按下Alt + '/'的時候,彈出內容輔助的窗口。從中可以選擇相應的建議,進行快速輸入。
下面是相應的代碼,非常簡單。
sShell = new Shell();
sShell.setText("Shell");
GridLayout gridLayout = new GridLayout(1, false);
sShell.setLayout(gridLayout);
sShell.setSize(new Point(300, 200));
final Text t = new Text(sShell, SWT.BORDER | SWT.MULTI);
t.setLayoutData(new GridData(GridData.FILL_BOTH));

autoActivationCharacters = new char[]
{ '#', '(' };

try
{
keyStroke = KeyStroke.getInstance("Alt+/");

} catch (ParseException e1)
{
e1.printStackTrace();
}
ContentProposalAdapter adapter = new ContentProposalAdapter(t,
new TextContentAdapter(), new SimpleContentProposalProvider(

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