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!