我想让SWT Canvas的背景透明,以便可以在其后面看到其他小部件。
我尝试将alpha设置为0并使用矩形填充画布,并使用选项SWT.NO_BACKGROUND无效。
答案 0 :(得分:2)
AFAIK,SWT无法以这种方式(以跨平台的方式)将小部件放在彼此之上。透明背景不允许看到其他小部件。此外,对透明像素的任何点击都不会委托给后面的小部件。
但是你可以将贝壳放在彼此之上。并且您可以创建具有不规则边界的透明壳或壳。请参阅Snippets中的Shell示例。这是不一样的,但取决于你想要达到的目标,它可能就足够了。
答案 1 :(得分:1)
有一种方法可以在 Linux(GTK)上执行此操作。 (但是,它不能在Windows上工作。(不要了解MacOSX。)
只需setBackground
到带有alpha通道的RGBA。 E.g:
Canvas canvas = new Canvas(parent, SWT.NONE);
canvas.setBackground(new Color(canvas.getDisplay(), 100,100,100,100));
//Note the last argument (I'm setting not only R, G, B, but also A).
您甚至不需要SWT.NO_BACKGROUND
,SWT.TRANSPARENT
或其他样式标记。
P.S。:你不应该以这种方式创造颜色。颜色将使用dispose处理。将新创建的颜色分配给变量,以便能够重复使用并释放它。我创造了颜色"内联"只是为了简单的例子。
附加说明:不要将alpha通道设置为0.虽然较小的值应该意味着更透明,但实际上它并不适用于值0,只有1和更高。可能它认为0未设置或等等。
答案 2 :(得分:0)
在Windows上,我成功完成了以下透明控制:
final Composite composite = new Composite(parent, SWT.TRANSPARENT);
composite.addListener(SWT.Paint, new Listener() {
@Override
public void handleEvent(Event event) {
event.gc.drawString("hello world", 0, 0, true);
}
});
不幸的是,这在OS X或Linux上不起作用。
答案 3 :(得分:0)
您可以使用:
shell.setAlpha(180);
可以设置从 0 到 255 的值。 0 表示透明, 255 表示纯色背景
答案 4 :(得分:0)
尝试:
new Canvas(parent, SWT.TRANSPARENT);