Wie lassen sich geschwungene Linien programmieren?
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:
- setColor() bestimmt die Farbe der Zeichnung. Hier nur eingesetzt, um die Teilabschnitte besser zu kennzeichnen.
- drawLine() zeichnet eine Gerade zwischen zwei Punkten, die durch ihre x- und y-Koordinaten definiert werden.
- 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: