java - 获取Eclipse E4的GUI组件

标签 java user-interface eclipse-rcp e4

我们使用 Eclipse E4 构建了一个 GUI。现在我们需要从非 GUI 类连接到 GUI。我们如何连接到工具控件中的标签或如何连接到 Eclipse E4 中的所有 GUI 组件?

我们已经研究过@inject,但没有成功。

我们应用程序的 GUI 如下所示: enter image description here

最佳答案

实现此目的的一种方法是使用管理器对象,该对象提供设置控件值的方法。您将管理器对象放入 Eclipse 上下文中,以便可以将其注入(inject)到任何类中(前提是该类是由注入(inject)系统创建的)。

您可以通过多种方式在 Eclipse 上下文中创建管理器类,其中一种只需声明为:

@Creatable
@Singleton
public class MyMananger

这将导致注入(inject)系统创建在注入(inject)的任何地方使用的类的单个实例。您还可以使用 OSGi 服务、ContextFunction 或直接将对象设置到 IEclipseContext(可能在 LifeCycle 类中)。

您的工具控制代码可以注入(inject)管理器并告诉它应该更新的控件。

希望更新控件的其他代码可以注入(inject)管理器并调用方法来设置控件的值。

正如我提到的,只有由注入(inject)系统创建的代码才能使用@Inject。如果您使用 new 创建类,则您没有使用注入(inject)系统。请改用 ContextInjectionFactory.make 方法。

这是一个非常简单的“状态行”代码,改编 self 使用的代码:

经理:

@Creatable
@Singleton
public final class StatusLineManager
{
  /** Label control to show the status */
  private Label _label;

  public StatusLineManager()
  {
  }

  void setLabel(Label label)
  {
    _label = label;
  }

  public void setText(String text)
  {
    if (_label != null && !_label.isDisposed())
      _label.setText(text);
  }
}

状态行工具控制:

public class StatusLineControl
{
  public StatusLineControl()
  {
  }

  @PostConstruct
  public void postConstruct(Composite parent, StatusLineManager manager)
  {
    Composite body = new Composite(parent, SWT.NONE);

    body.setLayout(GridLayoutFactory.fillDefaults().extendedMargins(10, 0, 4, 0).create());

    Label label = new Label(body, SWT.NONE);

    label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));

    // Tell the manager about the label

    manager.setLabel(label);
  }
}

关于java - 获取Eclipse E4的GUI组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39102133/

相关文章:

java - Spring MVC - 使用路径变量编辑响应 URL

java - 动态创建时出现新按钮上下文问题

java - 有一个表模型。需要同时根据两个不同的列进行排序

c# - 推荐工作流应用程序的设计模式

python - 命令行脚本的 Cookbook GUI 界面

eclipse-plugin - "Help->install new software"无法从源代码运行

java - 使用 Java Streams 获取不包含在同一列表中的结果列表

java - 精确的XSD验证规则

java - Eclipse RCP - 在 Java 上显示线程

java - Listener 类对 TableViewer 没有影响?