首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

為 SWT 應用程式裝上「智能內容助手」:從 HTML 編輯器實作看 JFace 文本框架擴展

     編輯:Java 相關知識

前言:內容助手不只屬於 Eclipse Workbench

內容助手(Content Assist)綁定於 JFace SourceViewer,不僅用於 Eclipse 編輯器,也能用於任何基於 SWT/JFace JAR 的獨立應用。本文在 Eclipse 編輯器外掛環境示範實作,並給獨立應用移植提示。

步驟 0:用精靈 10 分鐘生成 HTML 編輯器骨架

  1. New Plug-in Project → 「Plug-in with an editor」
  2. 專案名「Sample HTML Editor」,ID com.bdaum.SampleHTMLEditor
  3. 編輯器類名 HTMLEditor,名稱「Sample HTML Editor」,副檔名 html, htm
  4. Run → Run-time Workbench 測試:建 .html 檔用新編輯器打開

此時 Ctrl+Space 無反應——SourceViewer 預設無內容助手。

核心架構:SourceViewerConfiguration + IContentAssistant + IContentAssistProcessor

生成的 XMLConfiguration(繼承 SourceViewerConfiguration)是配置中樞。需覆寫:

  • getContentAssistant():返回裝配好處理器的 ContentAssistant
  • getInformationControlCreator():自訂附加資訊視窗渲染(如標籤粗體)
  • getContextInformationValidator() + computeContextInformation():支援上下文資訊驗證

實作 HtmlContentAssistProcessor:雙模式智能提示

模式一:結構建議(無選取文字時)
從文檔偏移位置向後掃描限定符(如 <TA),匹配預定義標籤陣列(STRUCTTAGS1/2 分前綴/後綴),生成 CompletionProposal,光標落在標籤內合適位置。
模式二:樣式包裹(有選取文字時)
針對選取文字,提供 <b>/<i>/<code>/<strong> 等包裹建議。因替換長度不定,彈出視窗顯示簡短標籤(bold 等),選中時以 ContextInformation 顯示預覽,附加資訊視窗展示完整替換結果。

關鍵代碼片段

// getContentAssistant() 核心裝配
ContentAssistant assistant = new ContentAssistant();
IContentAssistProcessor processor = new HtmlContentAssistProcessor();
assistant.setContentAssistProcessor(processor, XMLPartitionScanner.XML_TAG);
assistant.setContentAssistProcessor(processor, XMLPartitionScanner.XML_DEFAULT);
assistant.setContentAssistProcessor(processor, IDocument.DEFAULT_CONTENT_TYPE);
assistant.enableAutoActivation(true);          // 自動觸發
assistant.setAutoActivationDelay(500);         // 500ms 延遲
assistant.setProposalSelectorBackground(bgColor); // 綠底區分附加視窗
assistant.setInformationControlCreator(getInformationControlCreator(sourceViewer));
return assistant;

進階體驗優化

  • 自動觸發字符:getCompletionProposalAutoActivationCharacters() 返回 '<',輸入標籤開頭自動彈出
  • 附加資訊視窗美化:自訂 IInformationPresenter,在 updatePresentation 中掃描 <...> 加粗(StyleRange + SWT.BOLD)
  • 上下文資訊:樣式建議插入後顯示「bold Style applied」等提示,需實作 computeContextInformation 與 ContextInformationValidator
  • 獨立應用啟動鍵綁定:掛 VerifyKeyListener 攔截 Ctrl+Space 調用 sourceViewer.doOperation(CONTENTASSIST_PROPOSALS);Workbench 編輯器則用 TextOperationAction + setActionActivationCode

高階話題:參數化模板建議(Linked Mode)

Java 編輯器的「參數化建議」(如 for 範本中變數名同步修改)屬 JDT 專有(org.eclipse.jdt.internal.ui.text.java.ExperimentalProposal 等),無 JDT 環境無法直接用。幸好源碼開放,移植難度不大,有需求可自行遷移。

結語

透過 SourceViewerConfiguration 靈活裝配 ContentAssistant、IContentAssistProcessor、IInformationPresenter、ContextInformation,即可為任何 SWT/JFace 文本編輯器賦予專業級內容助手體驗。本文 HTML 編輯器範例展示了結構建議、樣式包裹、自動觸發、預覽視窗、上下文提示完整鏈路,代碼結構清晰可直接擴展。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved