我们用Eclipse构建了一个GUI。现在,我们需要从非GUI类连接到GUi。我们如何连接到工具控件中的标签,或者如何连接到Eclipse E4中的所有E4组件?
我们已经看过了@inject,但没有成功。
我们的应用程序的Gui如下所示:

发布于 2016-08-23 13:30:59
其中一种方法是使用manager对象,它提供方法来设置控件的值。您将manager对象放在Eclipse上下文中,以便可以将其注入到任何类中(只要类是由注入系统创建的)。
您可以通过多种方式在Eclipse上下文中创建一个manager类,其中之一就是声明为:
@Creatable
@Singleton
public class MyMananger这将导致注入系统在注入的任何地方创建使用的类的单个实例。您还可以使用OSGi服务、ContextFunction或直接将对象设置为IEclipseContext (可能在LifeCycle类中)。
您的工具控制代码可以注入管理器,并告诉它应该更新的控件。
其他希望更新控件的代码可以注入管理器和调用方法来设置控件的值。
正如我所提到的,只有由注入系统创建的代码才能使用@Inject。如果使用new创建类,则不使用注入系统。使用ContextInjectionFactory.make方法代替。
下面是一个非常简单的“状态栏”代码,它来自于我使用的代码:
经理:
@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);
}
}https://stackoverflow.com/questions/39102133
复制相似问题