2014-02-09 19 views
1

我已經使用SWT/JFace實現了一個複雜的視圖,不幸的是我已經爲不同的元素使用了很多靜態成員。現在我想將這些元素重構爲實例變量,但也有很多外部類和方法依賴於這些元素。返回一個SWT/JFace視圖

例如,此視圖中的TreeViewer被聲明爲靜態,並且我實現了一個簡單的靜態getTreeViewer方法,該方法被稱爲例如,通過JFace Action,再次靜態。它運行良好。

所以我在考慮爲我的視圖類實現一種類型的吸氣方法,擴展了org.eclipse.ui.part.ViewPart。我希望通過這種方式,如果需要,我可以將運行時Eclipse中此視圖的實例返回到外部類,並且以這種方式可以訪問先前靜態現實實例字段的實際值。

但是現在,沒有靜態字段和方法,我必須使用new關鍵字來調用非靜態方法,這顯然會導致NPE,因爲不會有任何createPartControl()方法。或者我應該能夠以某種方式返回已經實例化的視圖?這是我缺乏的地方?對於整個View來說,返回方法應該如何,以便可以在實際狀態下訪問其內部?有沒有簡單的方法來做到這一點?謝謝!

+0

忘記提及,但它可能是明顯的,這不是一個Singleton類的情況,所以沒有一個聲明字段中視圖,它持有它。但必須有一個實例,可以訪問,對吧? – DanglingElse

回答

1

你可以得到這樣的觀點:

ExampleView view = (ExampleView) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView("viewId"); 
if (view != null) { 
    view.getTreeViewer(); 
} 

現在,您可以訪問視圖的所有公共方法。

如果您在其它視圖或編輯器的使用:

ExampleView view = (ExampleView) getSite().getWorkbenchWindow().getActivePage().findView("viewId"); 
if (view != null) { 
    view.getTreeViewer(); 
} 
相關問題