关闭并重新打开后,RCP4窗口会失去背景色

时间:2018-12-31 09:01:46

标签: eclipse-rcp rcp e4

我创建了这个用户管理应用程序,并对其应用了一些样式。第一次查看时,我所有的窗口背景色看起来都很好,但是如果我使用“取消”按钮或其他方式将其关闭,然后重新打开它们,背景色就消失了。我认为这可能是由于关闭窗口的方式将设置为false所致,但这不是因为按钮和组仍保留其样式。谁能告诉我为什么会这样以及如何解决?如果我应该发布更多代码,请提出要求。谢谢!

enter image description here enter image description here

我在此处分配样式:

@PostConstruct
public void postConstruct(Composite parent) 
{
    parent.setData("org.eclipse.e4.ui.css.CssClassName", "ColorGrad");

    RoleController roleController = new RoleController();
    parent.getShell().setBounds(0, 0, 380, 435);

    parent.setLayout(null);
    ......

如果取消按钮功能确实与它有某种关系,则与之相关:

btnCancel = new Button(parent, SWT.NONE);
btnCancel.setBounds(185, 354, 160, 36);
btnCancel.setText("Cancel");
btnCancel.setData("org.eclipse.e4.ui.css.CssClassName", "orange");
btnCancel.addSelectionListener(new SelectionListener( ) {
    public void widgetDefaultSelected(SelectionEvent e) {
    }

    public void widgetSelected(SelectionEvent e) {
        modelService.find("ats_usermanagement_rcp.part.UserAddDialog", application).setToBeRendered(false);
        modelService.find("ats_usermanagement_rcp.dialog.UserAdmin", application).setToBeRendered(false);
    }
});

CSS:

.ColorGrad
{
    swt-background-mode: default;
    background-color: #697d87 #ff4612 #697d87 #697d87 #ff4612 60% 90% 95% 100%  
}

1 个答案:

答案 0 :(得分:2)

这对我有用:

在Application.e4xmi中,我有一个包含单个零件的窗口。 已关闭“要渲染”窗口。

显示窗口的处理程序执行以下操作:

@Execute
public void execute(final EModelService modelService, final MApplication app)
{
  final var window = modelService.find("window-id", app);

  window.setToBeRendered(true);
}

零件类具有:

@PostConstruct
public void postConstruct(final Composite parent, final EModelService modelService, final MApplication app)
{
  final var comp = new Composite(parent, SWT.None);
  comp.setLayout(new GridLayout());

  comp.setData("org.eclipse.e4.ui.css.CssClassName", "css-class-name");

  final var close = new Button(comp, SWT.PUSH);
  close.setText("Close");
  close.addListener(SWT.Selection, event ->
    {
      final var window = modelService.find(("window-id", app);

      window.setToBeRendered(false);
    });
}

这是在Composite parent的唯一子元素上设置CSS样式。

此代码适用于Java 10或更高版本(它使用var),对于Java的早期版本,将需要进行一些小的更改。