我是Eclipse RCP的新手,我正在开发一个应用程序(Eclipse 4),我有多个部分来展示来自不同来源的数据。我想添加一个菜单,显示一个Dialog,可以动态选择用户想要的数据源。选择选项后,我想使用选项作为参数重新实例化Part的类并刷新视图。这可能吗?
我的Part的createComposite方法:
@PostConstruct
public void createComposite(Composite parent) {
Composite composite = new Composite(parent, SWT.EMBEDDED);
parent_C = parent;
Frame frame_1 = SWT_AWT.new_Frame(composite);
JPanel mainPanel = new JPanel();
BorderLayout layout = new BorderLayout();
mainPanel.setLayout(layout);
/* Layout Definition */
}
我想在createComposite方法中添加另一个参数来指示选项:
@PostConstruct
public void createComposite(Composite parent, String[] options) {
/*Code Here*/
}
当用户从菜单验证选项时,String数组的值会更改。当用户验证他的选项时,应该使用新选项调用该部分的类。
有没有办法做到这一点?谢谢
答案 0 :(得分:1)
要执行此操作,您需要获取正在创建的零件的IEclipseContext
中的值。一种方法是订阅UIEvents.Context.TOPIC_CONTEXT
事件并在该事件中修改新部分的上下文。
@Inject
IEventBroker eventBroker;
eventBroker.subscribe(UIEvents.Context.TOPIC_CONTEXT, this::handleContextEvent);
private void handleContextEvent(Event event)
{
Object origin = event.getProperty(UIEvents.EventTags.ELEMENT);
if (!(origin instanceof MPart))
return;
MPart part = (MPart)origin;
// TODO check this is the MPart you want
Object context = event.getProperty(UIEvents.EventTags.NEW_VALUE);
if (!(context instanceof IEclipseContext))
return;
IEclipseContext newContext = (IEclipseContext)context;
newContext.set("nameForOptions", .... options ....);
}
我在这里使用了一个名称,因此您可以使用@Named
:
@PostConstruct
public void createComposite(Composite parent, @Named("nameForOptions") String[] options)
答案 1 :(得分:0)
不再重新创建整个部件,而是更容易刷新部件内部的内容。这应该可以通过处理部件的内容并在该容器下再次重新创建内容,或者通过任何表/表查看器的刷新机制来实现。