Repaint on translucent component
Question: When attempting to create a translucent window in Java on macOS and adding a JLabel with dynamic text, the component does not repaint correctly.
Solution: To resolve the issue, a custom JLabel can be extended and the Icon interface implemented to achieve the desired translucent effect. Here's an example using 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(); } }
In this approach, a custom JLabel (TranslucentLabel) is created and the AlphaComposite technique is applied to compose a semi-transparent background over the translucent frame background, ensuring that the component repaints correctly.
The above is the detailed content of How to Correctly Repaint a JLabel on a Translucent Window in Java on macOS?. For more information, please follow other related articles on the PHP Chinese website!