使用自定义背景色时,swing组件的java错误重绘()
当我将jcheckbox或JScrollPane(应用于保存所有其他组件以生成可滚动窗口的主组件)与使用
component.setBackground(new Color(R, G, B, A));
为了定义它们的背景色,我遇到了一些令人讨厌的重绘问题。将鼠标悬停在JCheckbox上会激活MouseListener,JCheckbox的背景会突然显示窗口的另一部分。即使将鼠标从JCheckbox上取下,这种情况仍然存在
使用时问题消失
JCheckbox.setRollOverEnabled(false);
但选中复选框时仍会发生
滚动窗格也不会正确重新绘制。只有在可见框架外的零件返回框架时,才会沿着滚动方向连续绘制几次。当一个程序崩溃时,它看起来与Windows操作系统上的错误类似,你可以用屏幕上的窗口“绘制”,因为每次你移动它(http://i.stack.imgur.com/L5G5Q.png)时,它都会“生成”一个新窗口
最有趣的是,当我使用
Color.grey (or any other pre-generated color)
如果根本不选择自定义背景色,它也会消失
那么,这里面隐藏的revalidate()和repaint()有问题吗?RGBA的使用是否存在问题,尤其是a(=不透明度)部分的颜色。任何颜色都有用吗
# 1 楼答案
是的,Swing不支持透明背景
Swing希望组件可以是:
setOpaque(...)
方法用于控制组件的不透明属性在任何一种情况下,这都可以确保移除任何绘画作品,并正确完成定制绘画
如果你想使用tranparency,那么你需要自己进行自定义绘制,以确保背景被清除
面板的定制喷漆为:
每一个使用透明度的组件都需要类似的代码
或者,您可以在Background With Transparency中查看自定义类,该类可用于任何将为您完成上述工作的组件