Auf durchscheinender Komponente neu streichen
Frage: Beim Versuch, ein durchscheinendes Fenster in Java unter macOS zu erstellen und ein hinzuzufügen JLabel mit dynamischem Text, die Komponente wird nicht neu gezeichnet korrekt.
Lösung: Um das Problem zu beheben, kann ein benutzerdefiniertes JLabel erweitert und die Icon-Schnittstelle implementiert werden, um den gewünschten durchscheinenden Effekt zu erzielen. Hier ist ein Beispiel mit 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(); } }
Bei diesem Ansatz wird ein benutzerdefiniertes JLabel (TranslucentLabel) erstellt und die AlphaComposite-Technik angewendet, um einen halbtransparenten Hintergrund über dem durchscheinenden Rahmenhintergrund zu erstellen und so sicherzustellen, dass die Komponente wird korrekt neu lackiert.
Das obige ist der detaillierte Inhalt vonWie kann ich ein JLabel in einem durchscheinenden Fenster in Java unter macOS korrekt neu zeichnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!