Eclipse 透明SWT帆布

Eclipse 透明SWT帆布,eclipse,swt,Eclipse,Swt,我想使SWT画布的背景透明,以便可以看到它后面的其他小部件 我尝试将alpha设置为0,并用矩形填充画布,同时使用选项SWT.NO_BACKGROUND也没有用。AFAIK,SWT不可能以这种方式(以跨平台的方式)将小部件放置在彼此的顶部。透明背景不允许看到其他小部件。此外,对透明像素的任何点击都不会委托给后面的小部件 但是你可以把壳放在彼此的上面。可以创建透明壳或边界不规则的壳。请参见中的Shell示例。这是不一样的,但取决于您想要实现什么,这可能就足够了。在Windows上,我成功地实现了以

我想使SWT画布的背景透明,以便可以看到它后面的其他小部件


我尝试将alpha设置为0,并用矩形填充画布,同时使用选项SWT.NO_BACKGROUND也没有用。

AFAIK,SWT不可能以这种方式(以跨平台的方式)将小部件放置在彼此的顶部。透明背景不允许看到其他小部件。此外,对透明像素的任何点击都不会委托给后面的小部件


但是你可以把壳放在彼此的上面。可以创建透明壳或边界不规则的壳。请参见中的Shell示例。这是不一样的,但取决于您想要实现什么,这可能就足够了。

在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上不起作用。

您可以使用:

shell.setAlpha(180);

该值的设置范围为02550表示透明,255表示纯色背景

Linux(GTK)上有一种方法可以做到这一点。(但是,它在Windows上不起作用。(不知道MacOSX。)

只需使用alpha通道将背景设置为RGBA即可。例如:

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
或其他样式标志

附言:你不应该用这种方式创造颜色。要使用dispose处理颜色。将新创建的颜色指定给变量,以便能够重用和释放它。为了简单起见,我创建了颜色“内联”

附加说明:不要将alpha通道设置为0。虽然较小的值应该意味着更透明,但实际上它不适用于值0,只适用于值1及以上。它可能会将0视为未设置或诸如此类。请尝试:

 new Canvas(parent, SWT.TRANSPARENT);

可以使用FormLayout将小部件放在彼此的顶部。但我不知道如何使画布透明。错,可以将控件放在彼此的顶部。使用setBounds位置并给它layoutData,告诉它从布局中排除。好的,显然你可以这样做,但这不是问题所在。这是关于透明背景的。我会澄清我的答案。我在Windows上用SWT 4.712尝试过,但它不起作用(@ThomasS.,是的,你说得对。它在Windows上不起作用。至少,在我的Windows 7虚拟机上不起作用。