首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取Eclipse组件E4

获取Eclipse组件E4
EN

Stack Overflow用户
提问于 2016-08-23 13:07:35
回答 1查看 239关注 0票数 1

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-23 13:30:59

其中一种方法是使用manager对象,它提供方法来设置控件的值。您将manager对象放在Eclipse上下文中,以便可以将其注入到任何类中(只要类是由注入系统创建的)。

您可以通过多种方式在Eclipse上下文中创建一个manager类,其中之一就是声明为:

代码语言:javascript
复制
@Creatable
@Singleton
public class MyMananger

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

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

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

正如我所提到的,只有由注入系统创建的代码才能使用@Inject。如果使用new创建类,则不使用注入系统。使用ContextInjectionFactory.make方法代替。

下面是一个非常简单的“状态栏”代码,它来自于我使用的代码:

经理:

代码语言:javascript
复制
@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);
  }
}

状态线工具控制:

代码语言:javascript
复制
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);
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39102133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档