如何自定义控件的背景颜色以输入EMFForms生成的布尔值?

时间:2014-11-05 13:30:02

标签: java swt eclipse-emf emf

我有一个EMF模型,我从中生成了UI表单并将其嵌入到向导中。

复选框显示为白色背景(见下文),看起来并不好看。

Screenshot

如何更改复选框的背景颜色(避免白条)?

我尝试使用BooleanControlSWTRenderer子类(见下文),但它没有用。

public class MyRenderer extends BooleanControlSWTRenderer {

    @Override
    protected Control createSWTControl(Composite parent, Setting setting) {


        final Button check = new Button(parent, SWT.CHECK);
        check.setForeground(parent.getDisplay().getSystemColor(SWT.COLOR_GRAY));
        check.setData(CUSTOM_VARIANT, "org_eclipse_emf_ecp_control_boolean"); //$NON-NLS-1$

        return check;

    }
}

更新1(05.11.2014 17:12 MSK):按照建议here致电check.setBackground(null)也无效。

更新2(05.11.2014 17:34 MSK):修改此代码

@Override
protected Control createSWTControl(Composite parent, Setting setting) {
    Button check = new Button(parent, SWT.CHECK);

    check.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_GRAY));
    parent.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_GRAY));
    parent.setBackgroundMode(SWT.INHERIT_FORCE);

    check.setData(CUSTOM_VARIANT, "org_eclipse_emf_ecp_control_boolean"); //$NON-NLS-1$

    return check;

}

产生以下视图。

Screenshot 2

1 个答案:

答案 0 :(得分:1)

这可能就是你所需要的:

@SuppressWarnings("restriction")
public class MyRenderer extends BooleanControlSWTRenderer {

    @Override
    protected Control createSWTControl(final Composite parent, Setting setting) {
        final Button check = new Button(parent, SWT.CHECK);
        check.addPaintListener(new PaintListener() {
            @Override
            public void paintControl(PaintEvent arg0) {
                check.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_GRAY));
            }
        });
        return check;

    }
}

MyRenderer的区别在于我们使用附加解决方法并添加绘图侦听器due to this problem

我已经尝试过它了see this page