Wie lassen sich geschwungene Linien programmieren?

Geschwungene Linien zu programmieren ist recht schreibaufwändig, da jeder Radius und die Länge jedes Teilstückes angegeben werden müssen.

Das Prinzip besteht darin, dass auf die übliche Weise die Methode paintComponent(Graphics g), hier eines JPanel, überschrieben und in dieser für jeden Radius und jede Strecke eine Zeichenaktion ausgeführt wird.
Im Einzelnen ist das hier so realisiert, dass im Konstruktor des von JFrame abgeleiteten Beispiels ein JPanel deklariert und hinzugefügt wird. Das Panel wird hier als anonyme Klasse realisiert. Wie erwähnt wird ihre Methode paintComponent(Graphics g) überschrieben. Dort kommen im Wesentlichen drei Methoden des Graphics-Objektes zum Einsatz:

  1. setColor() bestimmt die Farbe der Zeichnung. Hier nur eingesetzt, um die Teilabschnitte besser zu kennzeichnen.
  2. drawLine() zeichnet eine Gerade zwischen zwei Punkten, die durch ihre x- und y-Koordinaten definiert werden.
  3. drawArc() zeichnet ein Kreis-/Ellipsensegment. Die Parameter dieser Methode umfassen von links nach rechts die folgenden Werte:
    • Abstand der vollständigen Ellipse vom linken Panelrand
    • Abstand der vollständigen Ellipse vom oberen Panelrand
    • horizontaler Durchmesser der Ellipse
    • vertikaler Durchmesser der Ellipse
    • Anfangspunkt des Ellipsensegmentes (0 = 3 Uhr)
    • Ellipsensegment in Grad (positiv = gegen den Uhrzeigersinn)

Setzt man die Anfangs- und Endpunkte der Teilelemente geschickt zusammen, ergeben sich wie hier geschwungene Linien.

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class BogenZeichnen extends JFrame {

    JPanel panel;

    public BogenZeichnen() {
        
        panel = new JPanel() {
            public void paintComponent(Graphics g) {
                g.setColor(Color.WHITE);
                g.fillRect(0, 0, this.getWidth(), this.getHeight());
                
                g.setColor(Color.RED);
                g.drawLine(100,10,100,100);
                g.setColor(Color.GREEN);
                g.drawArc(100, 75, 50, 50, 180, 90);
                g.setColor(Color.BLUE);
                g.drawArc(100, 125, 50, 50, 90, -180);
                g.setColor(Color.BLACK);
                g.drawArc(115, 175, 20, 20, 90, 180);
                g.drawArc(120, 195, 10, 10, 90, -180);
                
            }
        };
        add(panel);

        this.setSize(300, 300);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }

    public static void main(String[] args) {
        new BogenZeichnen();
    }
}

Die Klasse erzeugt die folgende Ausgabe:

Screenshot: Bogen zeichnen