透明UI(+ UIManager)工件

时间:2012-06-01 11:12:42

标签: java swing transparent uimanager uidefaults

我有一个应用程序在background image上绘制panel,但为了获得最佳用户界面,我需要设置Component背景Transparent

我使用UI管理器使每个组件都透明: uimanager.put(Button, background(new color(0, 0, 0, 0);< - 类似的东西,除了..

之外,它的效果非常好

onMouseOver component重绘自己(我猜)并导致工件..如何在UIManager中避免这种情况?

(我创建了一个课程:uidefaults.java包含所有UIManager设置)

提前致谢!!

1 个答案:

答案 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 ) );

这将强制标签隐藏其默认背景并绘制您自己的背景(这取决于组件的背景属性)。