gpt4 book ai didi

java - 获取Eclipse E4的GUI组件

转载 作者:行者123 更新时间:2023-11-30 02:49:36 25 4
gpt4 key购买 nike

我们使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com