获取 Eclipse E4 的 GUI 组件

Get GUI components of Eclipse E4

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

我们已经查看了@inject,但没有成功。

我们应用程序的 Gui 如下所示:

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

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

@Creatable
@Singleton
public class MyMananger

这将导致注入系统创建一个 class 的实例,无论它被注入到哪里。您还可以使用 OSGi 服务、ContextFunction 或直接将对象设置到 IEclipseContext(可能在 LifeCycle class 中)。

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

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

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

这是一个非常简单的 'status line' 代码,改编自我使用的代码:

经理:

@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);
  }
}