2013-03-14 107 views
0

我想在執行操作時打開包含表格的視圖。Eclipse RCP - 如何以編程方式創建和打開View?

我可以viewId通過代碼開放的觀點:在plugin.xml中定義

display.asyncExec(new Runnable(){ 

     public void run() { 
     ApplicationGIS.getView(true, viewId); 

    }}); 

這種觀點的ID,但我要傳遞一些參數表上的這一觀點。我可以以編程方式創建自定義視圖,但是這次我無法打開它,因爲我沒有它的ID。這裏是我的視圖類:

public class MyCustomView extends ViewPart { 

    private Text text; 
    private Table table; 
    private TableViewer tableViewer; 


    @Override 
    public void createPartControl(Composite parent) { 
     // TODO Auto-generated method stub 
     parent.setLayout(new GridLayout(4, false)); 

     Composite composite = new Composite(parent, SWT.NONE); 
     composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 4, 1)); 
     composite.setLayout(new GridLayout(2, false)); 

     text = new Text(composite, SWT.BORDER); 
     text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); 

     Composite composite_1 = new Composite(composite, SWT.NONE); 
     composite_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1)); 
     GridLayout gl_composite_1 = new GridLayout(1, false); 
     gl_composite_1.horizontalSpacing = 0; 
     gl_composite_1.marginHeight = 0; 
     gl_composite_1.marginWidth = 0; 
     gl_composite_1.verticalSpacing = 0; 
     composite_1.setLayout(gl_composite_1); 

     tableViewer = new TableViewer(composite_1, SWT.BORDER | SWT.FULL_SELECTION); 

     table = tableViewer.getTable(); 
     table.setHeaderVisible(true); 
     table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); 
    } 

    @Override 
    public void setFocus() { 
     // TODO Auto-generated method stub 

    } 

} 

那麼如何訪問這個編程創建的視圖並打開它?

+0

什麼Eclipse版本你使用3.x或4.x的? – Chriss 2013-03-14 10:50:12

+0

我正在使用3.x.順便說一句,我會嘗試你的答案,謝謝。 – cgrgcn 2013-03-14 11:28:19

回答

7

在Eclipse 3.x中,你可以打開這樣的一個觀點:

MyView view = (MyView) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(viewer_ID); 

或者,如果你正在實現一個命令處理程序,您可以撥打:

HandlerUtil.getActiveWorkbenchWindow(event).getActivePage().showView(viewId); 

設定一些內容,您可以只需在您的ViewPart中添加一個像void setInput(MyContent input)這樣的方法,並在打開它之後將所需的參數傳遞給此方法。

+0

「MyView view =(MyView Viewer)」上的查看器是什麼?我嘗試像這樣'MyView view =(MyView)PlatformUI.getWorkbench()。getActiveWorkbenchWindow()。getActivePage()。showView(viewer_ID);'但它拋出空指針異常。 – cgrgcn 2013-03-14 11:38:43

+0

對不起,這是一個錯字! NPE可能是因爲調用不是在UI線程中完成的,或者工作臺尚未啓動。試着用'Display#asyncExec(..)'或WorkbenchJob來包裝代碼。 – Chriss 2013-03-15 08:56:29

+0

RCP視圖有一個很大的限制,因爲它們是由工作臺實例化的,並且不支持手動實例化(抽象方法不能使用)。是的,您可以在創建後通過方法傳遞參數,但不能從視圖返回值! – marcolopes 2017-03-31 18:17:12

0

From @Chriss answer;

我添加了一個方法setInput(parameter)我的看法,然後我可以通過我的價值觀我的自定義視圖這樣

MyCustomView view = new MyCustomView();  
    view.setInput(parameter); 
    display.asyncExec(new Runnable(){ 

     public void run() { 
     ApplicationGIS.getView(true, viewId); 


    }}); 

和工作原理。

+1

視圖應該由擴展點創建,而不是由您自己創建。否則,以後可能會遇到一些麻煩。 – Chriss 2013-03-15 09:02:11

+0

是的,你說得對。 – cgrgcn 2013-03-15 13:30:51

+0

如果我的答案可以隨意標記爲「回答」 – Chriss 2015-10-23 07:12:11

1

我有完全相同的問題。我想從插件中註冊的視圖創建更多視圖。這些網址會得到你想要的東西:

http://wiki.eclipse.org/FAQ_How_do_I_open_multiple_instances_of_the_same_view

http://www.java-tips.org/other-api-tips/eclipse/how-to-create-multiple-instances-of-one-viewpart.html

PlatformUI.getWorkbench().getActiveWorkbenchWindow(). 
getActivePage().showView(String viewID,String secondaryID,int Mode); 
+0

該問題解決了另一個問題(將參數傳遞到創建的視圖)。您的答案顯示瞭如何打開相同視圖的MULTIPLE實例(使用視圖的「secondaryId」) – marcolopes 2017-03-31 18:26:43

相關問題