2014-04-02 34 views
0

我正在制作微波模拟程序,并有一个恼人的问题。我想让微波炉观察窗口在按下按钮时改变颜色,以可视化微波开启。但是,因为我在背景中也有一个带有图标(食物图像)的jlabel,所以我需要背景为半透明。我已经完成了为jPanel(cookingWindow)添加一个alpha值。Java - 在背景上的图形故障repaint

它开始像这样

所以我已经基本上完成了设置一个ActionEvent与下面的代码的启动按钮。
cookingWindow.setBackground(new Color (250,234,1, 150)); cookingWindow.repaint();

这工作,但出现这种情况

当我最小化和最大化窗口,一切都回到地方。但显然,如果您不必将窗口最小化,那将是更可取的。有关如何阻止这个视觉错误的任何想法?

回答

2

查看Backgrounds With Transparency了解问题的解释和一些解决方案。

基本上问题是Swing opaque属性如何处理透明背景(它不)。

+0

感谢您的链接。迷惑我的部分是,当我最小化和最大化窗口时,它的工作原理也是我想要的。这是为什么? – user2773084

+0

@ user2773084这将涉及组件的绘制顺序 – MadProgrammer

+0

@ user2773084,可能是因为整个框架被重新绘制,所以所有的子组件都被绘制以便背景被正确地绘制。但是,当您更新标签时,只有标签因为不透明而被重新绘制。 – camickr

-1

重新验证和重新绘制jFrame似乎可以解决所有问题。我以前只重绘jPanel。

+0

-1,不是正确的解决方案。你的代码打破了摆动组件之间的绘画合约。我看到你没有阅读我在博客中提供的关于绘画如何工作的更多细节的链接。不要采取捷径。 – camickr

+0

重新绘制通常可以解决摆动+1中的问题 – khandelwaldeval