Repeindre sur un composant translucide
Question : Lorsque vous tentez de créer une fenêtre translucide en Java sur macOS et que vous ajoutez un JLabel avec texte dynamique, le composant ne repeint pas correctement.
Solution : Pour résoudre le problème, un JLabel personnalisé peut être étendu et l'interface Icon implémentée pour obtenir l'effet translucide souhaité. Voici un exemple utilisant 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(); } }
Dans cette approche, un JLabel personnalisé (TranslucentLabel) est créé et la technique AlphaComposite est appliquée pour composer un arrière-plan semi-transparent sur l'arrière-plan du cadre translucide, garantissant que le composant repeint correctement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!