JavaSWT-画布上的透明背景?

JavaSWT-画布上的透明背景?,java,canvas,swt,Java,Canvas,Swt,有没有可能在绘制的图像上填充一个矩形和一个椭圆形,并使椭圆形成为后面图像的“窗口” e.gc.drawImage(//...); e.gc.setBackground(//black); e.gc.fillRectangle(//over the image); e.gc.setBackground(//SWT.TRANSPARENT?); e.gc.fillOval(somewhere on the canvas); 这段代码显然不适合我,但这能用SWT实现吗 不要使用fillOval()和

有没有可能在绘制的图像上填充一个矩形和一个椭圆形,并使椭圆形成为后面图像的“窗口”

e.gc.drawImage(//...);
e.gc.setBackground(//black);
e.gc.fillRectangle(//over the image);
e.gc.setBackground(//SWT.TRANSPARENT?);
e.gc.fillOval(somewhere on the canvas);

这段代码显然不适合我,但这能用SWT实现吗

不要使用
fillOval()
fillRectangle()
,而是使用
drawOval()
drawRectangle()
绘制轮廓,而不是填充区域

以下是:

使用前景色在指定的矩形区域内绘制椭圆形的轮廓

fillOval()
的作用是:

用接收器的背景色填充指定矩形区域内椭圆形的内部

我设法做到了

我所做的是使用SWT.NO_TRIM属性创建一个新的shell(它的父对象是canvas/costude小部件),并在其上使用
setRegion()

诀窍是区域本身,它有一个
subtract()
方法, 所以我找到了一种生成多边形的方法,并从区域中减去它

然后我把它放好,瞧。 我必须添加调整大小和移动侦听器,使其看起来“自然”(即,画布的一部分,而不是新的shell)


实际上它工作得很好。

是的,我知道这些选项,我应该提到矩形必须覆盖图像,而椭圆形必须是透明的。@omm118好的,然后使用
fillRectangle()
drawOval()
@omm118,还是要“删除”椭圆形矩形的部分?如果我使用fillRectangle和than-drawOval,椭圆形的背景就是矩形,如果我使用drawOval和than-fillRectangle,矩形也会覆盖椭圆形。@omm118不知道怎么做。您可能需要自己绘制多边形