package javacodebook.media.draw.fillgradient; import java.awt.*; import java.awt.geom.*; import javax.swing.*; /** * Ein einfaches Panel, um die Zeichenmöglichkeiten in Java zu demonstrieren. */ public class FillShapes extends JPanel{ /** * In Swing sollte im Gegensatz zum AWT immer die Methode paintComponent * überschrieben werden. */ public void paintComponent(Graphics graphics) { super.paintComponent(graphics); Graphics2D g = (Graphics2D) graphics; float startx = 10, starty = 10; float width=80, height=60; //Den Farbverlauf definieren und ein gefülltes Rechteck zeichnen //Der Farbverlauf geht von links (schwarz) nach rechts (weiss) linear GradientPaint gradient = new GradientPaint(startx, starty, Color.black, startx + width, starty, Color.white); g.setPaint(gradient); g.fill(new Rectangle2D.Double(startx, starty, width, height)); startx = 110; //Farbverlauf diagonal von links oben nach rechts unten gradient = new GradientPaint(startx, starty, Color.black, startx + width, starty + height, Color.white); g.setPaint(gradient); g.fill(new Rectangle2D.Double(startx, starty, width, height)); startx = 20; starty = 110; //Zyklischer Farbverlauf mit Zentrum in der Mitte gradient = new GradientPaint(startx, starty, Color.black, startx + width, starty, Color.white, true); g.setPaint(gradient); g.fill(new Rectangle2D.Double(startx, starty, width*2, height)); } /** Die gewünschte Größe des Panels festlegen */ public Dimension getPreferredSize() { return new Dimension(200, 200); } /** Einen Frame erzeugen und das Panel anzeigen */ 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 FillShapes(), BorderLayout.CENTER); f.pack(); f.show(); } }