package javacodebook.media.graphic.transparency; import java.awt.*; import java.awt.geom.*; import javax.swing.*; /** Eine Demonstration der Möglichkeite, transparente Figuren zu zeichnen. */ public class TransparentShapes extends javax.swing.JPanel { public TransparentShapes() { setBackground(Color.white); } public void paintComponent(Graphics graphics) { super.paintComponent(graphics); //Das Graphics-Objekt in ein Graphics2D-Objekt casten, das es ja auch ist Graphics2D g = (Graphics2D)graphics; //Den Nullpunkt in die Mitte verschieben g.translate(getWidth()/2,getHeight()/2); int x = -60, y = -25, w = 120, h = 50; //Den Rahmen deutlich absetzen BasicStroke stroke = new BasicStroke(3.0f); g.setStroke(stroke); //Rahmen ohne Transparenz zeichnen g.setPaint(Color.red); g.draw(new Ellipse2D.Double(x, y, w, h)); //Transparente Farbe definieren (50% Transparenz) g.setPaint(new Color(1.0f, 0f, 0f, 0.5f)); g.fill(new Ellipse2D.Double(x, y, w, h)); //Koordinatensystem rotieren um 120° und mit der nächsten Farbe zeichnen g.rotate(Math.PI/3); g.setPaint(Color.green); g.draw(new Ellipse2D.Double(x, y, w, h)); g.setPaint(new Color(0f, 1.0f, 0f, 0.5f)); g.fill(new Ellipse2D.Double(x, y, w, h)); //Koordinatensystem erneut rotieren g.rotate(Math.PI/3); g.setPaint(Color.blue); g.draw(new Ellipse2D.Double(x, y, w, h)); g.setPaint(new Color(0f, 0f, 1.0f, 0.5f)); g.fill(new Ellipse2D.Double(x, y, w, h)); } public Dimension getPreferredSize() { return new Dimension(200,200); } public static void main(String[] args) { JFrame f = new JFrame(); f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); f.getContentPane().setLayout(new BorderLayout()); f.getContentPane().add(new TransparentShapes()); f.pack(); f.show(); } }