package javacodebook.media.draw.stroke; import java.awt.*; import java.awt.geom.*; import javax.swing.*; /** * Ein einfaches Panel, um die Zeichenmöglichkeiten in Java zu demonstrieren. */ public class StrokeExamples extends JPanel{ /** * In Swing sollte im Gegensatz zum AWT immer die Methode paintComponent * überschrieben werden. */ public void paintComponent(Graphics graphics) { super.paintComponent(graphics); //Graphics-Objekt ist in Wahrheit ein Graphics2D-Objekt Graphics2D g = (Graphics2D) graphics; //aktuelle Zeichenfarbe setzen g.setColor(Color.black); //Ein Rechteck mit Rahmendicke 5 zeichnen BasicStroke fatBorder = new BasicStroke(5.0f); g.setStroke(fatBorder); g.draw(new Rectangle2D.Double(10, 10, 80, 60)); //Ein Rechteck mit gestricheltem Rahmen zeichnen BasicStroke stroke = new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 1.0f, new float[] {5.0f}, 0.0f); g.setStroke(stroke); g.draw(new RoundRectangle2D.Double(110, 10, 80, 60, 15, 15)); //Rahmen mit verschiedenen Strichlängen zeichnen stroke = new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 1.0f, new float[] {5.0f, 5.0f, 2.0f, 5.0f}, 0.0f); g.setStroke(stroke); g.draw(new RoundRectangle2D.Double(210, 10, 80, 60, 15, 15)); //Linien überschneiden sich am Ende ohne Effekt stroke = new BasicStroke(10.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL); g.setStroke(stroke); int x = 25; g.draw(new Line2D.Double(x, 160, x+25, 135)); g.draw(new Line2D.Double(x+25, 135, x+50, 160)); //Linien überschneiden sich am Ende, Spitze wird gezeichnet stroke = new BasicStroke(10.0f, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER); g.setStroke(stroke); x = 125; g.draw(new Line2D.Double(x, 160, x+25, 135)); g.draw(new Line2D.Double(x+25, 135, x+50, 160)); //Linien überschneiden sich am Ende, Spitze wird abgerundet stroke = new BasicStroke(10.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); g.setStroke(stroke); x = 225; g.draw(new Line2D.Double(x, 160, x+25, 135)); g.draw(new Line2D.Double(x+25, 135, x+50, 160)); } /** Die gewünschte Größe des Panels festlegen */ public Dimension getPreferredSize() { return new Dimension(300, 180); } /** 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 StrokeExamples(), BorderLayout.CENTER); f.pack(); f.show(); } }