import java.awt.AlphaComposite; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Transparency; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import javax.swing.JButton; /** * Ein Button, der transparent ist. Bei einem Klick auf den Button, verändert * sich der opacity Wert */ public class OpaqueButton extends JButton { private BufferedImage image; private float opacity; public OpaqueButton(String text, float o) { super(text); this.opacity = o; setOpaque(false); /* * Füge einen ActionListener hinzu, der definiert, was passiert, wenn * der Button gedrückt wird. */ addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // Erhöhre opacity (Modulo 1) opacity = (opacity+.125f)%1.0001f; // Der Button muss nun neu gezeichnet werden repaint(); } }); } /** * Diese Methode wird vom EDT aufgerufen, wenn sich der Button auf g * zeichnen soll */ @Override public void paint(Graphics g) { // Falls die Grösse des Bildes nicht stimmt, erstelle ein neues if (image==null || image.getWidth()!=getWidth() || image.getHeight()!=getHeight()) { image = new BufferedImage(getWidth(), getHeight(), Transparency.TRANSLUCENT); } // Zeichne den Button, als wäre nichts, auf das Bild Graphics gi = image.getGraphics(); super.paint(gi); // Zeichne das Bild transparent auf g Graphics2D g2 = (Graphics2D) g; g2.setComposite(AlphaComposite.SrcOver.derive(opacity)); g2.drawImage(image,0,0,null); } }