【问题标题】:Returning a SWT/JFace view返回 SWT/JFace 视图
【发布时间】:2014-02-09 21:15:33
【问题描述】:

我已经使用 SWT/JFace 实现了一个复杂的视图,不幸的是我一直在为不同的元素使用很多静态成员。现在我想将这些元素重构为实例变量,但也有很多外部类和方法依赖于这些。

例如,这个视图中的TreeViewer 被声明为静态的,我实现了一个简单的静态getTreeViewer 方法,它被称为例如通过 JFace 动作,再次静态。效果很好。

所以我正在考虑为扩展org.eclipse.ui.part.ViewPart 的视图类实现一种getter 方法。我希望通过这种方式,如果需要,我可以将运行时 Eclipse 中的这个 View 的实例返回给外部类,这样就可以访问以前静态的 now 实例字段的实际值.

但是现在,没有静态字段和方法,我要么必须使用new关键字才能调用非静态方法,这显然会导致NPE,因为不会有任何createPartControl()方法叫。或者我应该能够以某种方式返回已经实例化的视图?而这正是我缺乏的地方?整个 View 的返回方法应该是什么样的,以便可以在其实际状态下访问其内部?有没有一种简单的方法可以做到这一点?谢谢!

【问题讨论】:

  • 忘记提了,但很可能很清楚,这不是类似单例的情况,因此没有声明的视图字段来保存它。但必须有某处的实例,可以访问,对吧?

标签: java view static swt jface


【解决方案1】:

你可以得到这样的视图:

ExampleView view = (ExampleView) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView("viewId");
if (view != null) {
    view.getTreeViewer();
}

现在您可以访问视图的所有公共方法。

如果您在另一个视图或编辑器中,请使用:

ExampleView view = (ExampleView) getSite().getWorkbenchWindow().getActivePage().findView("viewId");
if (view != null) {
    view.getTreeViewer();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多