2

我有一个background image在 a 上绘制 a 的应用程序panel,但要实现最佳 UI,我需要设置Component背景Transparent

我通过使用 UI 管理器使每个组件变得透明: uimanager.put(Button, background(new color(0, 0, 0, 0);<- 类似的东西,这工作得很好,除了..

onMouseOver重绘本身(我猜)并component导致工件..我怎样才能避免这种情况UIManager

(我创建了一个类:uidefaults.java所有UIManager设置)

提前致谢!!

4

1 回答 1

3

好吧,这很简单——不要对不透明的组件(确切地说是任何 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 ) );

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

于 2012-06-01T12:43:56.700 回答