2012-08-31 34 views
4

如何從其他位置訪問ViewObjectRAP:如何訪問ViewPart中的對象

(下面的代碼是隻是勾畫了我想做的事情)

public class View extends ViewPart { 

    public static final String ID = "view"; 
    private static List list; 

    public View() { 
    } 

    @Override 
    public void createPartControl(Composite parent) { 
     list = new List(parent, SWT.BORDER); 
    } 

    @Override 
    public void setFocus() { 
    } 

    public static void addToList(String string) { 
     list.add(string); 
    } 
} 

現在我希望能夠在應用程序中使用View.addToList("Message")任何地方。

+0

等等,爲什麼你不能只是做一個getter函數? – thatidiotguy

+0

@thatidiotguy因爲他知道他不會實例化一個'View' :) –

+0

@RomanC Ohohohohohohohohohohoho。你的意思是這將是一個靜態類?使用成員變量!?!?!?! – thatidiotguy

回答

1

使用下面的代碼片段,並用您在plugin.xml中爲您的視圖指定的ID替換[ID]

IViewPart viewPart = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView([ID]); 

的ID通常在com.domain.something.viewName形式,並可以在您的視圖的貢獻被發現。

+0

[ID]在我的例子中應該是「查看」?我在哪裏使用這個片段;這個「findView」如何幫助我? –

+0

如果它與你的plugin.xml視圖貢獻相同,那麼肯定:) – knownasilya

+0

噢好吧,我明白了。 Thx很多幫助;) –

1

當工作臺啓動時,View以及ViewPart已在ViewRegistry中註冊。 Workbench包含所有註冊的視圖和編輯器。從工作臺註冊表獲取該視圖信息的最簡單方法。首先檢查是否PlatformUI.getWorkbench().isStarting()。一旦這個方法返回false你可以得到

IViewDescriptor descriptor = PlatformUI.getWorkbench().getViewRegistry().find("view"); 

當工作臺啓動它註冊的所有視圖和編輯參與了,但運行您的代碼,你需要確保工作臺正在運行,你有看法的一個實例。

要創建View的一個實例,你可以使用代碼

try { 
    IViewPart view = descriptor.createView(); 
    view.createPartControl(); 
} catch (CoreException e) { 
    // TODO something with e 
    e.printStackTrace(); 
} 

現在你be able to use View.addToList("Message") anywhere in the application

+0

那麼你如何從註冊表中獲得視圖? – knownasilya

+1

@Knownasilya我已經詳細描述了這個過程。 –