2

background image上に を描画するアプリケーションがありますがpanel、最適な UI を実現するには、Component背景を設定する必要がありTransparentます。

UI Manager を使用して、すべてのコンポーネントを透明にし ましたuimanager.put(Button, background(new color(0, 0, 0, 0);

onMouseOvercomponentそれ自体を再描画し(推測します)、アーティファクトを引き起こします..でこれを回避するにはどうすればよいですUIManagerか?

(私はクラスを作成しました:uidefaults.javaすべてのUIManager設定で)

前もって感謝します!!

4

1 に答える 1

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

これにより、ラベルはデフォルトの背景を非表示にし、独自の背景もペイントします (コンポーネントの background プロパティに依存します)。

于 2012-06-01T12:43:56.700 に答える