Rumah  >  Artikel  >  Java  >  Bagaimana untuk mengecat semula JLabel dengan betul pada Tetingkap Lutsinar di Java pada macOS?

Bagaimana untuk mengecat semula JLabel dengan betul pada Tetingkap Lutsinar di Java pada macOS?

Barbara Streisand
Barbara Streisandasal
2024-11-20 12:07:11207semak imbas

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

Cat semula pada komponen lut sinar

Soalan: Apabila cuba mencipta tetingkap lut sinar dalam Java pada macOS dan menambah JLabel dengan teks dinamik, komponen tidak mengecat semula dengan betul.

Penyelesaian: Untuk menyelesaikan isu, JLabel tersuai boleh dilanjutkan dan antara muka Ikon dilaksanakan untuk mencapai kesan lut sinar yang diingini. Berikut ialah contoh menggunakan 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();
    }
}

Dalam pendekatan ini, JLabel tersuai (TranslucentLabel) dicipta dan teknik AlphaComposite digunakan untuk mengarang latar belakang separa lutsinar di atas latar belakang bingkai lut sinar, memastikan komponen mengecat semula dengan betul.

Atas ialah kandungan terperinci Bagaimana untuk mengecat semula JLabel dengan betul pada Tetingkap Lutsinar di Java pada macOS?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn