【发布时间】:2012-12-12 23:13:03
【问题描述】:
我正在学习如何使用表单创建一个 Eclipse RCP 应用程序,并且我正在构建一个简单的原型来说明我需要这样做。我在 Windows x64 平台上使用 64 位 Eclipse 3.7 和 Java 1.7。
我正在尝试做的是相当标准的:应用程序左侧的视图包含一棵树 (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 eclipse-rcp rcp