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

Java 如何自定义控件的背景色以输入由EMFForms生成的布尔值?,java,swt,eclipse-emf,emf,Java,Swt,Eclipse Emf,Emf,我有一个EMF模型,从中生成UI表单并将其嵌入到向导中 复选框显示为白色背景(见下文),看起来不太好看 如何更改复选框的背景色(避免白色条带) 我尝试使用BooleanControlSWTRenderer子类(见下文),但没有成功 public class MyRenderer extends BooleanControlSWTRenderer { @Override protected Control createSWTControl(Composite parent, S

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

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

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

我尝试使用
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):调用
检查。建议的设置背景(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;

}
结果显示在以下视图中


这可能就是您需要的:

@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
不同的是,我们使用了一个附加的解决方法,并添加了一个绘画监听器


我已经试过了,效果很好。

setBackground
而不是
setForeground
应该可以。那是个打字错误。当我把它改回
setBackground
时,我得到了相同的结果。