」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何正確地重新繪製半透明 Swing 元件?

如何正確地重新繪製半透明 Swing 元件?

發佈於2024-11-25
瀏覽:967

How to Properly Repaint Translucent Swing Components?

如何處理半透明框架/面板/組件上的重繪

半透明組件在更新其內容時可能會帶來重繪挑戰,從而導致不吸引人的視覺效果。本文探討了涉及 AlphaComposite 的解決方案,並提供了實作此解決方案的程式碼範例。

了解 AlphaComposite

AlphaComposite 允許操縱圖形如何合成到框架上。透過設定適當的規則,可以控制渲染元素的透明度。

實作半透明元件

一種方法是擴展 JLabel 並實作 Icon。這樣就可以建立可以顯示文字的半透明元件。

將整個框架修改為半透明

要使整個框架半透明,請調整框架的背景顏色以具有透明組件。不過,要注意的是,這也會影響內容的不透明度。

程式碼範例

JLabel 範例:

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

public class TranslucentJLabel extends JLabel {

    public TranslucentJLabel() {
        setOpaque(false);
        setBackground(new Color(0f, 0f, 0f, 0.5f));
        setFont(new Font("Serif", Font.PLAIN, 48));
    }

    @Override
    protected void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        g2d.setComposite(AlphaComposite.SrcOver);
        super.paintComponent(g2d);
    }

}

半透明框架範例:

import java.awt.AlphaComposite;
import java.awt.Color;
import javax.swing.JFrame;

public class TranslucentFrame extends JFrame {

    public TranslucentFrame() {
        setBackground(new Color(0f, 0f, 0f, 0.7f));
        setUndecorated(true);
        setSize(300, 200);
        setLocationRelativeTo(null);
        setVisible(true);
    }

    @Override
    public void paint(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        g2d.setComposite(AlphaComposite.SrcOver);
        super.paint(g2d);
    }
}

透過實作這些技術,您可以建立具有有效重繪行為的半透明框架和元件。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3