我正在學習如何使用窗體創建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();
但這似乎沒有幫助。關於接下來要嘗試的任何想法?
我試過這些建議,但都沒有工作。您分享的鏈接很有趣,但我認爲我的問題在於我如何使用Eclipse Forms,而文章沒有提及它們。我的代碼的選擇和偵聽部分工作正常 - 我遇到的問題是詳細信息視圖不是在選擇上繪製。只有當窗口大小調整後,窗體纔會顯示。 – JasonK
窗口大小調整後,將在窗體上觸發重排。這就是爲什麼我的第一反應是做迴流......你見過這個http://www.ralfebert.de/blog/eclipsercp/rcp_examples/?我認爲這些例子與你的非常相似。 – GGrec
我已經看到了你之前提到的鏈接 - 它有一些非常類似於我所做的優秀示例,但不幸的是這些示例在Eclipse 3.7(或更新版本)中似乎不起作用,並且沒有看到任何示例使用Eclipse Forms。我開始認爲沒有那麼多關於Eclipse Forms的信息,因爲它們不能很好地工作...... – JasonK