1

我知道如何在 JPanel 上绘制一个矩形,但是如何在屏幕上绘制一个矩形以使矩形看起来是浮动的?更具体地说,一个未填充的矩形。我的想法是使用一个透明的 JFrame,上面画了一个矩形;然而,这使得 JFrame 中的所有内容都是透明的。

我的解决方案 所以我认为有很多方法可以解决这个问题,有些比其他的更复杂,有些比其他的更实用。

我尝试了启动画面。问题是您需要在运行时传递 VM 参数“-splash”。我创建了一个清单文件来自动执行此操作/将参数放入 Eclipse;但随后代码依赖于 .gif 文件,我无法轻松更改矩形的大小/位置。通过屏幕截图伪造它时会出现类似的问题。不过建议很好,我学到了一些很酷的东西。

所以,回到我所做的。我使用了 JFrame,获取了内容窗格并将背景设置为红色(您想要的任何颜色),然后将框架设置为未装饰,这会删除窗口的标题栏和边框。这创建了一个浮动矩形,我可以轻松更改 (frame.setSize, .setLocation) 的大小和位置。我还没有把它变成一个非填充的矩形,我尝试了内部框架和分层窗格,但没有成功。

4

4 回答 4

1

JFrame 是一个重量级的组件,而且这些组件在很长一段时间内都是不透明的。但是,从 Java 6u10 开始,该类中有一个用于透明窗口的非官方APIcom.sun.awt.AWTUtilities,这很可能在 Java 7 中成为官方 API。在早期版本中,模拟这种事情的唯一方法是通过截图来伪造java.awt.Robot

于 2009-06-17T15:24:17.260 回答
0

您可能必须让窗口的某些部分透明,而实际绘制的矩形不是。我怀疑是否存在与平台无关的解决方案,因此您需要为此求助于 JNI。根据您需要做的事情,使窗口对点击不可见也可能很好,这也需要其他技巧。

于 2009-06-17T15:21:16.080 回答
0

https://github.com/twall/jna/

该项目提供了一个库,并提供了半透明的时钟和信息气球示例,甚至超越了您正在尝试做的事情。演示在 Windows 上运行良好,但我无法说出它们的跨平台程度。

于 2009-06-17T15:21:54.707 回答
0

您可能想查看JLayeredPane。此页面上的演示部分显示了您想要的内容,但是在绘制矩形时,您需要将绘制设置为透明:

AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f);
g2d.setComposite(ac);
g2d.drawImage(image, x, y, this);
于 2009-06-17T15:32:35.763 回答