我有一个应用程序在background image
上绘制panel
,但为了获得最佳用户界面,我需要设置Component
背景Transparent
:
我使用UI管理器使每个组件都透明:
uimanager.put(Button, background(new color(0, 0, 0, 0);
< - 类似的东西,除了..
onMouseOver
component
重绘自己(我猜)并导致工件..如何在UIManager
中避免这种情况?
(我创建了一个课程:uidefaults.java
包含所有UIManager
设置)
提前致谢!!
答案 0 :(得分:3)
嗯,这很简单 - 不要将透明背景颜色与OPAQUE的组件(确切地说是任何JComponent祖先)一起使用。
要删除组件背景,您不需要设置透明色 - 只需使用此方法:
component.setOpaque ( false );
这将隐藏组件背景,并且还将更改组件重绘策略,以便它不会在重绘调用上创建任何工件。
此外,如果您仍希望在组件后面具有半透明背景,则可以覆盖paintComponent方法,如下所示:
JLabel label = new JLabel ( "Transparent background" )
{
protected void paintComponent ( Graphics g )
{
g.setColor ( getBackground () );
g.fillRect ( 0, 0, getWidth (), getHeight () );
super.paintComponent ( g );
}
};
label.setOpaque ( false );
label.setBackground ( new Color ( 255, 0, 0, 128 ) );
这将强制标签隐藏其默认背景并绘制您自己的背景(这取决于组件的背景属性)。