如何设置SWT按钮前景颜色?

4

SWT Button 类有一个 setForeground(Color) 方法,但它似乎没有效果(该方法实际上是在 Button 的超类中)。Javadoc 表示此方法是一个提示,可能会被平台覆盖。我的平台是 Windows。

  • 这是否意味着在 Windows 上无法设置按钮前景颜色?
  • 其他平台上可以吗?
  • 是否有解决方法?
4个回答

5
在Windows上,对于按钮使用setForeground没有效果。
解决办法是,在你的Button上添加一个PaintListener。在这个Listener的paintControl方法中,获取生成的事件的GC,并使用它重新编写你的Button文本,使用你想要的颜色。
实际上,你可以在你的Button上绘制任何东西。

@Kevin Stembridge 我对SWT GC不太了解,你能帮我解决一下如何正确定位吗? 因为文本可以有不同的对齐方式,所以这似乎很棘手。谢谢! - RAY
可以通过Button的getSize()方法和GC的stringExtent()方法来定位。这样就可以获得按钮和文本的大小。 - Alex

2
如果您需要带有SWT.CHECK样式的按钮,可以尝试使用没有文本的按钮并添加标签元素。例如:
chkAutorun = new Button(fCompositeLogin, SWT.CHECK);
Label lblAutorun = new Label(fCompositeLogin, SWT.NONE);
lblAutorun.setForeground(white);
lblAutorun.setText("Autorun");

0

以下是在SWT中实现按钮前景色的代码,同时允许显示助记键并通过按下Alt +“助记键”启用;

Button radioButton=new Button(parent,SWT.RADIO);
StringBuffer sb = new StringBuffer("I am a Coloured radio button");
String name=null;
 String S = "I am a Coloured radio button";
String substr="C";
int i=S.indexOf(substr);
sb.insert(i,"&");
S=sb.toString();
name=sb.substring(i, i+2);
name=sb.toString();
String whiteSpace=" ";
final String TName=S;

for(int l=0;l<1000;l++)
    whiteSpace=whiteSpace.concat("            ");

radioButton.setText(name+whiteSpace);

radioButton.addPaintListener(new PaintListener(){
 String name=TName;
    @Override
    public void paintControl(PaintEvent e) {
        // TODO Auto-generated method stub
        e.gc.setForeground(hex2Col("ffffcc"));
        int x=21;
        int y=21;
        e.gc.drawText(name, x,y,SWT.DRAW_MNEMONIC | SWT.TRANSPARENT);

    }

});

注意:hex2Col是我自己编写的将十六进制颜色代码转换为颜色类型的方法

注意:这里ALT+C是我使用的助记键组合


0
在Windows上,setForeground对于Group也不起作用。
如果您能说服用户使用经典主题,setForeground将神奇地工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接