ホームページ > Java > &#&チュートリアル > macOS 上の Java で半透明ウィンドウの JLabel を正しく再描画する方法は?

macOS 上の Java で半透明ウィンドウの JLabel を正しく再描画する方法は?

Barbara Streisand
リリース: 2024-11-20 12:07:11
オリジナル
246 人が閲覧しました

How to Correctly Repaint a JLabel on a Translucent Window in Java on macOS?

半透明コンポーネントの再描画

質問: macOS 上の Java で半透明ウィンドウを作成しようとして、動的テキストを含む JLabel では、コンポーネントが正しく再描画されません。

解決策: この問題を解決するには、カスタム JLabel を拡張し、アイコン インターフェイスを実装して、目的の半透明効果を実現します。 AlphaComposite を使用した例を次に示します。

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JLabel;

public class TranslucentLabel extends JLabel {

    private Image image;
    private AlphaComposite alphaComposite;

    public TranslucentLabel() {
        super();
        setBackground(new Color(0f,0f,0f,0.3f));
        alphaComposite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f);
    }

    @Override
    public void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        image = createImage(getWidth(), getHeight());
        Graphics2D imageGraphics = (Graphics2D) image.getGraphics();
        imageGraphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        super.paintComponent(imageGraphics);
        g2d.setComposite(alphaComposite);
        g2d.drawImage(image, 0, 0, null);
        g2d.dispose();
    }
}
ログイン後にコピー

このアプローチでは、カスタム JLabel (TranslucentLabel) が作成され、AlphaComposite テクニックを適用して、半透明のフレームの背景の上に半透明の背景を合成し、コンポーネントが正しく再描画されます。

以上がmacOS 上の Java で半透明ウィンドウの JLabel を正しく再描画する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート