我知道如何在JPanel上绘制一个矩形,但是如何在屏幕上绘制一个矩形以使矩形看起来漂浮?更具体地说,是一个未填充的矩形。我的想法是使用一个透明的JFrame,上面画着一个矩形;但是,这使得JFrame中的所有内容都是透明的。
我的解决方案 所以我认为有很多方法可以解决这个问题,有些方法比其他方法更复杂,有些方法比其他方法更实用。
我试过了启动画面。问题是你需要在运行时传递VM参数“-splash”。我创建了一个清单文件来自动化/把参数放到eclipse中;但是代码依赖于.gif文件而我无法轻易更改矩形的大小/位置。通过屏幕截图伪装时会出现类似的问题。不过好的建议,我学到了很多很酷的东西。
所以,回到我的所作所为。我使用了一个JFrame,得到了内容窗格并将背景设置为红色(你想要的颜色),然后设置未修饰的框架,删除窗口的标题栏和边框。这创建了一个浮动矩形,我可以很容易地改变(frame.setSize,.setLocation)的大小和位置。我还没有把它做成一个非填充矩形,我尝试了内部框架和分层窗格,但没有成功。
答案 0 :(得分:1)
JFrame是一个重量级组件,它们总是不透明的时间最长。但是,从Java 6u10开始,类com.sun.awt.AWTUtilities
中的透明窗口有inofficial API,这很可能在Java 7中成为官方窗口。在早期版本中,模拟此类事物的唯一方法是使用java.awt.Robot
答案 1 :(得分:0)
您可能必须让窗口的某些部分透明,而实际绘制的矩形则不是。我怀疑有一个与平台无关的解决方案,所以你需要求助于JNI。根据你需要做的事情,让窗口对于需要其他技巧的点击不可见也可能会很不错。
答案 2 :(得分:0)
该项目提供了一个图书馆,并提供了一个半透明的时钟和信息气球的例子,甚至超越了你想要做的事情。这些演示在Windows上运行良好,但我无法谈论它们是如何跨平台的。
答案 3 :(得分:0)
您可能需要查看JLayeredPane。此页面上的演示部分显示了您想要的内容,但是在绘制矩形时,您需要将绘制设置为透明:
AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f);
g2d.setComposite(ac);
g2d.drawImage(image, x, y, this);