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 ein JPanel deklariert und einem JFrame 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.Dimension;
import java.awt.Graphics;

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

public class GeschwungeneLinieZeichnen {


    public GeschwungeneLinieZeichnen() {
        init();
    }
    
    private void init() {
        JPanel panel = new JPanel() {
            @Override
            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);
            }
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(300, 300);
            }
        };
        JFrame frame = new JFrame("Geschwungene Linie zeichnen");
        frame.add(panel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new GeschwungeneLinieZeichnen());
    }
}

Die Klasse erzeugt die folgende Ausgabe:

Screenshot: Bogen zeichnen

Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.