2010-03-07 48 views
6

我正在開發一個Eclipse插件,在按下按鈕時,插件將在Java編輯器中選定的文本並放入顯示的文本框中。從Eclipse Java編輯器中抓取選定文本

我的代碼看起來是這樣的:我從這裏得到它:http://dev.eclipse.org/newslists/news.eclipse.newcomer/msg02200.html

private ITextSelection getSelection(ITextEditor editor) { 
    ISelection selection = editor.getSelectionProvider() 
      .getSelection(); 
    return (ITextSelection) selection; 
} 

private String getSelectedText(ITextEditor editor) { 
    return getSelection(editor).getText(); 
} 

問題是,我將如何得到所顯示的Java編輯器的ITextEditor。巧合的是,在我張貼的鏈接線的下一個問題,但它是沒有答案:(

+0

當你說:「選擇的文本,」你的意思其實強調的,或者僅僅是目前的關鍵詞光標是嗎? – StockB

回答

7

你可以索要ActiveEditor,如this thread

IEditorPart part; 

part = 
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().get 
ActiveEditor(); 

if(part instanceof ITextEditor){ 
    ITextEditor editor = (ITextEditor)part; 
    IDocumentProvider provider = editor.getDocumentProvider(); 
    IDocument document = provider.getDocument(editor.getEditorInput()); 

Krt_Malta提到了這一點blog entry "Programmatically query current text selection"的OP,這類似於這個其他的答案(寫在之前的博客條目)"Replace selected code from eclipse editor through plugin command"

+0

另請參見SO問題http://stackoverflow.com/questions/1694748/adding-item-to-eclipse-text-viewer-context-menu與類似的問題 – VonC

+0

謝謝:)剛剛提交問題後,我決定給我之前發佈的方法在谷歌搜索只是爲了看看是否有任何匹配出現。其中一個命中是http://usayadis.wordpress.com/2009/10/20/programmatically-query-current-text-selection/,它正是我所期待的。 感謝和問候, Krt_Malta –

1

我想補充o對VonCs回答的事情。他所描述的選擇技術對於各種文本編輯器都很有用,不僅僅是Java編輯器,正如這個問題所描述的。但是他的解決方案在工作區部分爲MultiPageEditorPart的情況下不起作用,因爲這不是ITextEditor

但在很多情況下(例如使用標準的XML編輯器),MultiPageEditorPart的頁面爲ITextEditor。在這些情況下,您可以從MultiPageEditorPart獲得活動頁面並從中獲取選擇。

這可以用下面的代碼來完成:

ITextEditor editor = null; 

if (part instanceof ITextEditor) { 
    editor = (ITextEditor) part; 
} else if (part instanceof MultiPageEditorPart) { 
    Object page = ((MultiPageEditorPart) part).getSelectedPage(); 
    if (page instanceof ITextEditor) editor = (ITextEditor) page; 
} 

if (editor != null) { 
    IDocumentProvider provider = editor.getDocumentProvider(); 
    IDocument document = provider.getDocument(editor.getEditorInput()); 
} 
+0

好點,除了我的(老)答案。 +1 – VonC