Eclipse插件開發——視圖數據動態刷新

最近在開發一款Eclipse中的驗證插件,對於我這個新手來說,在遇到問題的時候只能通過搜索資料來彌補知識不足帶來的問題。在學習實踐中發現國內對於插件知識的講解真的很少,並且還很雜亂。因此這邊分享一下我在開發中遇到的問題及解決方法,通過總結希望可以幫助到有需要的夥伴們。後續有時間我也會整理一些插件講解進行分享。PS:以下內容純粹是個人想法,若有不足的地方希望同道中人一起討論學習進步。

好了下面講重點:

(1)如何添加視圖?

視圖在eclipse中對應的擴展點爲org.eclipse.ui.views,我們可以通過如圖界面進行擴展點的添加

其中關聯的class(TableResultView)是一個繼承與ViewPart的類,在該類中的createPartControl方法中可以自定義顯示的佈局,這邊代碼粘貼可以參考一下:

public class TableResultView extends ViewPart {
	TableItem item; 
	@Override
	public void createPartControl(Composite arg0) {
		// TODO Auto-generated method stub 
		Composite composite = new Composite(arg0,SWT.NONE);
		composite.setLayout(new FillLayout(SWT.HORIZONTAL));
		
		CheckboxTableViewer checkboxTableViewer = CheckboxTableViewer.newCheckList(composite, SWT.BORDER | SWT.FULL_SELECTION);
		Table table = checkboxTableViewer.getTable(); 
		table.setHeaderVisible(true);
		table.setLinesVisible(true); 
		// 創建表頭的字符串數組  
        String[] tableHeader = {"編號", "類名", "方法名", "驗證結果","錯誤信息","備註"};  
        for (int i = 0; i < tableHeader.length; i++)  
        {  
            TableColumn tableColumn = new TableColumn(table, SWT.NONE);  
            tableColumn.setText(tableHeader[i]);  
            // 設置表頭可移動,默認爲false  
            tableColumn.setMoveable(true);  
        } 
        //添加一行數據
        item = new TableItem(table, SWT.NONE);  
        item.setText(new String[]{"0", " ww" , " tt" , " ok" , "yy " , " 60"}); 
        // 重新佈局表格  
        for (int i = 0; i < tableHeader.length; i++)  
        {  
            table.getColumn(i).pack();  
        } 
	
	}

	@Override
	public void setFocus() {
		// TODO Auto-generated method stub 
	}
	//更新視圖數據
	public void updateData(String[] data) { 
        this.item.setText(data); 
	}

}

這樣我們就通過擴展點成功的給eclipse新增了一個視圖,我們可以在window--》show view--》other--》other下找到我們添加的視圖,如圖所示:

最後點擊展示出來的界面,類似於圖片格式:

(2)如何在另外一個java中主動打開視圖

這邊需要用到我們定義好的id,來指定對應的視圖

//打開視圖.
try {
	PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView("com.ylz.plugin.test.main.TableResultView");
} catch (PartInitException e) {
	e.printStackTrace();
}

(3)如何在另一個java文件中傳遞數據給視圖文件TableResultView,並刷新界面數據

這邊原先我想着只要在TableResultView定義一個updateData方法,然後在要傳值的java文件中實例化TableResultView,然後調用updateData的形式來處理數據傳遞及刷新。發現數據是成功傳入,但是 this.item.setText(data); 中的item對象一直是空指針異常,這個問題自己納悶了很久,完全沒啥頭緒。後來突發奇想,想着可能TableResultView也像是安卓開發中的控件一樣,需要通過指針來實例化,試驗了一下竟然成功了,開心。具體實現代碼如下:

//獲取視圖.此處傳入的是視圖ID.並不是包路徑
IViewPart part =(IViewPart)PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView("com.ylz.plugin.test.main.TableResultView");
TableResultView view = (TableResultView)part;
view.updateData(data);

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章