我們使用eclipse的java編輯器的時候,會經常用到alt+/觸發的自動代碼補全
這個並不僅僅是SWT/JFACE框架下的內容
更是屬於eclipse
先說明一下這個概念,現在的eclipse是基於osgi框架的,osgi是一個可熱插拔的以bundle為基本元素的靈活管理規范。eclipse提供了一個osgi規范的實現叫做equinox,eclipse的插件(plugin)即是bundle。
swt/jface則是用於構建eclipse的UI框架。
但是,你所說的這個問題,其實看下eclipse的編輯器如何實現的就能明白了。
去官網下載一個eclipse for rcp含源碼版本,即可看到代碼提示是怎么實現的。
我這里說下原理。
1、java編輯器屬於jdt(java develop tool)插件,這是正常的eclipse都會有的一組插件
2、提示代碼的內容是來自於數據字典,eclipse會隨時維護所有工作空間、jre內的class,用於編譯和索引
3、快捷鍵來自於視圖(viewer)的setKeyHandler
4、定位你指定的內容則是編輯器的mark記錄的
5、而最關鍵的,代碼提示,則是ISourceViewer.CONTENTASSIST_PROPOSALS(內容輔助提示)
以上都是屬於eclipse插件開發方面的知識
當然,你可以自己利用swt/jface來實現一個類似的,代碼如下:
首先你需要有一個org.eclipse.jface.text.source.SourceViewer,這是最基本的控件。
為該SourceViewer設置一個監聽,該監聽觸發一個ISourceViewer.CONTENTASSIST_PROPOSALS操作:
- sv.appendVerifyKeyListener(newVerifyKeyListener(){
- @Override
- publicvoid verifyKey(VerifyEvent event){
- if(event.stateMask == SWT.ALT && event.character =='/'){
- sv.doOperation(ISourceViewer.CONTENTASSIST_PROPOSALS);
- }
- }
然后,你需要重寫org.eclipse.jface.text.source.SourceViewerConfiguration#getContentAssistant(ISourceViewer sourceViewer),用於定義觸發CONTENTASSIST_PROPOSALS操作之后的動作
你可以自己用dialog之類的來實現代碼提示,當然更推薦使用:
org.eclipse.jface.text.contentassist.ContentAssistant#setContentAssistProcessor(IContentAssistProcessor processor, String contentType)
來完成操作。
eclipse本身就是一個完整的樣例,你可以參照jdt對SourceViewer的使用來完成以上。
參考:
org.eclipse.jdt.internal.ui.javaeditor.JavaSourceViewer
