我想为Frame(或JFrame)创建一个完全透明的背景并让它显示透明的动画。我设法让它在Windows 7 x64下工作,但是相同的代码不能在我的Linux上运行(Lubuntu x64 15.04)。透明背景JFrame Linux上的动画
下面的代码显示了我试图实现 - 只需复制&粘贴它。我只想让小矩形在屏幕上移动而不留下踪迹。
static int a = 0;
public static void main(String[] args) {
JFrame f = new JFrame();
f.setUndecorated(true);
f.setBackground(new Color(0, 0, 0, 0));
f.setVisible(true);
f.setSize(512, 512);
f.add(new JPanel() {
@Override
public void paintComponent(Graphics gr) {
Graphics2D g = (Graphics2D)gr;
g.setBackground(new Color(0, 0, 0, 0));
g.clearRect(0, 0, 512, 512);
g.drawRect(a, a++, 2, 2);
}
});
while(true) {
try {
Thread.sleep(30);
} catch(InterruptedException e) {
e.printStackTrace();
}
f.repaint();
}
}
我想实现(如在Windows中所示)和我所得到的与Lubuntu 15.04:
我只是想看看小方块就像Windows 7上显示的那样移动 - 我不想看到踪迹。
请不要给我Oracle的透明度和窗口文档的链接 - 我已经完成了三次。
我已经试过:
- 的Graphics2D的透明空间 '那么copyArea()'。 (这曾经工作AFAIK,但不再做)
- 玻璃面板
- 的AlphaComposite
- setPaint()
请请只是测试你的想法/代码第一。很多“这应该工作”的东西,我已经尝试过,似乎并不......所有的帮助,非常感谢。
多小时,小时后我发现它:这是一个背缓冲区的问题。我找到了解决这个问题的方法,但我现在没有太多时间,所以我会在今天晚些时候发布。仍然需要在Windows上测试它。我的解决方案似乎有点闪烁,所以我可能会看看我是否也可以解决这个问题。无论如何,我会非常感谢新解决方案的测试帮助,因为我只有Windows 7 x64和Lubuntu 15.04。多谢你们。 – Roland
不能等待答案,我会尝试在我的电脑上:D – JetStream
@JStStream我在下面发布了一个答案。它适用于Linux和Windows 7对我来说,但我没有一个Mac,所以我不能测试那个... – Roland