透明SWT画布

时间:2011-02-22 20:52:44

标签: eclipse swt

我想让SWT Canvas的背景透明,以便可以在其后面看到其他小部件。

我尝试将alpha设置为0并使用矩形填充画布,并使用选项SWT.NO_BACKGROUND无效。

5 个答案:

答案 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_BACKGROUNDSWT.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);