Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取Eclipse4的GUI组件_Java_User Interface_Eclipse Rcp_E4 - Fatal编程技术网

Java 获取Eclipse4的GUI组件

Java 获取Eclipse4的GUI组件,java,user-interface,eclipse-rcp,e4,Java,User Interface,Eclipse Rcp,E4,我们用Eclipse4构建了一个GUI。现在我们需要从非GUI类连接到GUI。我们如何连接到工具控件中的标签,或者如何连接到Eclipse4中的所有GUI组件 我们已经看过@inject,但没有任何成功 我们应用程序的Gui如下所示: 一种方法是使用管理器对象,该对象提供设置控件值的方法。您将manager对象放在Eclipse上下文中,以便可以将其注入任何类(只要该类是由注入系统创建的) 您可以通过多种方式在Eclipse上下文中创建manager类,其中一种方式仅声明为: @createab

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

我们已经看过@inject,但没有任何成功

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

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

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

@createable
@独生子女
公共级MyMananger
这将导致注入系统创建该类的单个实例,无论该类在何处被注入。您还可以使用OSGi服务、
ContextFunction
或直接将对象设置到
IEclipseContext
(可能在LifeCycle类中)

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

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

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

下面是根据我使用的代码改编的一个非常简单的“状态行”代码:

经理:

@createable
@独生子女
公共最终类StatusLineManager
{
/**标签控件以显示状态*/
自有品牌(简称"自有品牌"),;
公共状态行管理器()
{
}
无效设置标签(标签标签)
{
_标签=标签;
}
公共void setText(字符串文本)
{
如果(_label!=null&&!_label.isDisposed())
_label.setText(文本);
}
}
状态行工具控件:

公共类StatusLineControl
{
公共状态行控制()
{
}
@施工后
公共无效后构造(复合父级、StatusLineManager)
{
复合材料主体=新复合材料(母体,SWT.NONE);
setLayout(GridLayoutFactory.fillDefaults().extendedMargins(10,0,4,0.create());
标签=新标签(主体,SWT.NONE);
label.setLayoutData(新的GridData(SWT.FILL,SWT.CENTER,true,true));
//把标签的事告诉经理
manager.setLabel(标签);
}
}

对不起,我不明白你在问什么。请给我们一个您正尝试执行的示例。我们在状态栏上(在一个工具控件中)放置了一个标签。标签的作用是直观地给出连接状态(已连接、已断开)。我们需要改变一个普通控制器类的标签。好的,这对我有了进一步的帮助。现在,如果管理器数据发生更改,是否可以使用任何注释。所以GUI总是更新到管理器中的最新值?正如我所说的,最简单的事情是工具控制代码告诉管理器应该更新的控件,这样管理器就可以设置控件了。或者使用传统的监听器或使用
IEventBroker
事件。添加了一个简单的示例来回答哪个插件包含IEventBroker?当我使用IEventBroker时,我得到了“无法解析为类型”错误。Ok nvm在org.eclipse.e4.core.services中找到了它。