2009-02-05 237 views
4

我已經構建了一個簡單的Eclipse插件,用戶可以使用tableViewer的數據庫資源打開任何這些資源的編輯器。枚舉我所有的Eclipse編輯器?

因此,用戶可能有零個向上的編輯器運行實例。

是否有API可用來獲取這些編輯器實例的列表?

M.

回答

10

你可以得到所有打開的編輯器的引用:

PlatformUI.getWorkbench().getActiveWorkbenchWindow() 
    .getActivePage().getEditorReferences(); 

然後檢查這些選擇引用您的編輯器類型的實例的人。

1

要知道這樣一個枚舉not respect the tab order

下面是編輯的枚舉的例子:

IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event); 
IWorkbenchPage page = window.getActivePage(); 
IEditorPart actEditor = page.getActiveEditor(); 
IEditorReference[] editors = page.getEditorReferences(); 
for (int i=0; i<editors.length-1; i++) { 
    if (editors[i].getEditor(true) == actEditor) { 
    page.activate(editors[i+1].getEditor(true)); 
    return null; 
    } 
} 
+0

有你跳過數組中的最後一個編輯的原因?要查找數組中的所有元素,您應該執行`for(int i = 0; i Erk 2017-08-22 19:12:29

+0

@Erk不確定。七年前,這個例子來自https://www.eclipse.org/forums/index.php/t/106220/ – VonC 2017-08-22 19:47:05

5

根據的Javadoc的API工作臺可以有多個窗口和窗口可以有幾頁,並且不共享編輯。

因此,爲了讓所有和每一個打開的編輯器,你應該做的東西沿着這些路線(錯誤檢查等除外):

List<IEditorReference> editors = new ArrayList<IEditorReference>(); 
for (IWorkbenchWindow window : PlatformUI.getWorkbench().getWorkbenchWindows()) { 
    for (IWorkbenchPage page : window.getPages()) { 
     for (IEditorReference editor : page.getEditorReferences()) { 
      editors.add(editor); 
     } 
    } 
}