2012-12-12 120 views
2

我正在學習如何使用窗體創建Eclipse RCP應用程序,並且正在構建一個我需要這樣做的簡單原型。我在Windows x64平臺上使用64位Eclipse 3.7和Java 1.7。Eclipse RCP查看窗體不刷新

我想要做的是相當標準的:應用程序左側的視圖包含一棵樹(ViewTree),而右側的視圖(ViewDetail)使用eclipse窗體呈現關於樹的詳細信息選擇。我將ViewTree設置爲選擇提供者,並且ViewDetail設置爲傾聽ViewTree。我想ViewDetail刷新自己與每一個新的樹選擇。

這裏是ViewTree相關代碼:

public class ViewTree extends ViewPart 
{ 
    private TreeViewer treeViewer; 

    public ViewTree() { 
     super(); 
    } 

    @Override 
    public void createPartControl(Composite parent) { 
     treeViewer = new TreeViewer(parent, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL); 
     getSite().setSelectionProvider(treeViewer); 
     treeViewer.setLabelProvider(new TreeObjLabelProvider()); 
     treeViewer.setContentProvider(new TreeObjContentProvider()); 
    } 

這裏是ViewDetail相關代碼:

public class ViewDetail extends ViewPart implements ISelectionListener 
{ 
    private FormToolkit toolkit; 
    private ScrolledForm form; 
    private Composite compParent; 

    public ViewDetail() {} 

    @Override 
    public void createPartControl(Composite parent) { 
     toolkit = new FormToolkit(parent.getDisplay()); 
     form = toolkit.createScrolledForm(parent); 
     compParent = parent; 
     // register as a selection listener with the workbench 
     getSite().getPage().addSelectionListener(ViewTree.ID, (ISelectionListener) this); 
    } 

因爲我想在ViewDetail形式刪除自身,並用新的信息重繪對於每個新的選擇,在ViewDetail的selectionChanged(IWorkbenchPart part, ISelection selection)函數中,我呼叫 form.dispose(); 將其擦除然後重新吃了使用的形式: form = toolkit.createScrolledForm(compParent); 然後我確定什麼類型的對象已被選中,並相應地建立窗體。

問題是,一旦我在樹中選擇了一個對象,我的表單就會被處理掉,並且ViewDetail變爲空白。在窗口調整大小之前,視圖中不會顯示任何內容。一旦表格已經建好,我試圖通過撥打電話來刷新它: form.getBody().layout(); 但這似乎沒有幫助。關於接下來要嘗試的任何想法?

回答

0

我能夠通過調用來獲取表單不調整重繪:

compParent.layout(); 

所以,我是正確的軌道佈局的命令,我只需要調用它的頂層 - 父Composite,而不是表單,它是父級Composite的子級。感謝@GGeorge的幫助。

0

直接執行form.layout(true)

OR

你甚至可以嘗試form.reflow()

編輯:

Further reading on the topic, here。閱讀「聽取事件」部分。

+0

我試過這些建議,但都沒有工作。您分享的鏈接很有趣,但我認爲我的問題在於我如何使用Eclipse Forms,而文章沒有提及它們。我的代碼的選擇和偵聽部分工作正常 - 我遇到的問題是詳細信息視圖不是在選擇上繪製。只有當窗口大小調整後,窗體纔會顯示。 – JasonK

+0

窗口大小調整後,將在窗體上觸發重排。這就是爲什麼我的第一反應是做迴流......你見過這個http://www.ralfebert.de/blog/eclipsercp/rcp_examples/?我認爲這些例子與你的非常相似。 – GGrec

+0

我已經看到了你之前提到的鏈接 - 它有一些非常類似於我所做的優秀示例,但不幸的是這些示例在Eclipse 3.7(或更新版本)中似乎不起作用,並且沒有看到任何示例使用Eclipse Forms。我開始認爲沒有那麼多關於Eclipse Forms的信息,因爲它們不能很好地工作...... – JasonK