半透明コンポーネントの再描画
質問: macOS 上の Java で半透明ウィンドウを作成しようとして、動的テキストを含む JLabel では、コンポーネントが正しく再描画されません。
解決策: この問題を解決するには、カスタム JLabel を拡張し、アイコン インターフェイスを実装して、目的の半透明効果を実現します。 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(); } }
このアプローチでは、カスタム JLabel (TranslucentLabel) が作成され、AlphaComposite テクニックを適用して、半透明のフレームの背景の上に半透明の背景を合成し、コンポーネントが正しく再描画されます。
以上がmacOS 上の Java で半透明ウィンドウの JLabel を正しく再描画する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。