解决SWT Button设置背景颜色不可用的问题

时间:2022-05-10 22:22:45

 

在做Eclipse 的一个项目时遇到org.eclipse.swt.widgets.Button设置背景色,不起作用。

遇到问题后在网上找了好久,终于找到一段修正代码,不可直接使用,于是将其更改为如下方法。

本想重写swt的Button类,结果任务在身,遇到问题就放弃了,有能力的可以试试。

或许该方法还可以继续优化,大家继续啊。

 

使用方法:正常使用SWT Button,只是在设置背景设以后,记得调用下面的方法,即可,测试通过。

 

 

/***

* Just to fix button's backgroundColor,may be it is on test.

* @param button

*/

private void fixSetBackground(Button button) {

Color foreground = button.getForeground();

Color background = button.getBackground();

int x = 0;

int y = 0;

Rectangle rect = button.getBounds();

int width = rect.width;

int height = rect.height;

String text = button.getText();

if (width == 0)

width = 1;

if (height == 0)

height = 1;

button.setImage(new Image(button.getParent().getDisplay(), width,height));

Image original = button.getImage();

GC gc = new GC(original);

gc.setForeground(foreground);

gc.setBackground(background);

gc.drawRectangle(x, y, width, height);

gc.fillRectangle(x, y, width, height);

Font font = button.getFont();

FontData fontData = font.getFontData()[0];

int fontSize = fontData.getHeight();

gc.setFont(button.getFont());

int ximg = (x + width) / 2 - fontSize * text.length() / 3;

int yimg = (y + height) / 2 - fontSize * 3 / 4;

gc.drawText(text, ximg < 4 ? ximg : 4, yimg < 4 ? yimg : 4,

SWT.DRAW_TRANSPARENT | SWT.DRAW_MNEMONIC);

gc.dispose();

}

 

 

原文:https://bugs.eclipse.org/bugs/show_bug.cgi?id=23837