Wie kann man geometrische Grundformen wie Kreise, Ellipsen und Rechtecke zeichnen?

Das package java.awt.geom stellt Klassen zum Zeichnen geometrischer Grundformen bereit.

Die Klassen Rectangle2D und Ellipse2D ermöglichen das Zeichnen von Kreisen, Ellipsen, Quadraten und Rechtecken. Im Beispiel wird dies an einem Kreis gezeigt:
Ein JFrame wird mit einer Instanz einer Klasse beladen, die von JPanel abgeleitet wurde. In dessen Methode paintComponent() wird zunächst eine weiße, rechteckige Fläche in der Größe der Komponente gezeichnet, um eine kontrastreiche Darstellung zu erreichen. Vorher wird das als Parameter übergebene Graphics-Objekt in ein Graphics2D-Objekt gecastet. Die Zeichnung einer Ellipse oder seiner Sonderform des Kreises geschieht in Java anhand des die Form umschließenden achsenparallelen Rechtecks. Nimmt man den Mittelpunkt und den Radius als gegeben an, so errechnet sich die den Startpunkt definierende linke obere Ecke des Umschließungsrechtecks aus den Koordinaten des Mittelpunktes minus Radius und der Durchmesser aus der Verdoppelung des Radius. Mit diesen Werten wird ein Ellipse2D.Double-Objekt instanziert, das jedoch noch mit Hilfe der Methode draw() des Graphics2D-Objektes gezeichnet werden muss. Die Darstellung von Ellipsen und Rechtecken erfolgt auf äquivalente Art und Weise. Die statische Klasse ist von der abstrakten Klasse Ellipse2D abgeleitet. Sie erwartet entsprechende double-Parameter. Eine weniger genaue existiert mit der Klasse Eclipse2d.Float. Mit den Klassen Rectangle2D.Double bzw. Rectangle2D.Float verhät es sich äquivalent.

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;

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

/**
 * Zeichnet einen Kreis mit dem Mittelpunkt mx/my und dem Radius r
 * 
 */
public class KreisZeichnen extends JFrame {
    
    JPanel panel;
    
    public KreisZeichnen(){
        panel = new KreisPanel();
        add(panel);

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

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

class KreisPanel extends JPanel {
    public void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        g2d.setColor(Color.WHITE);
        g2d.fillRect(0, 0, this.getWidth(), this.getHeight());
        g2d.setColor(Color.BLACK);
        int mx = 150;
        int my = 150;
        int r = 100;
        Ellipse2D.Double kreis = new Ellipse2D.Double(mx-r, my-r, 2*r, 2*r);
        
        g2d.draw(kreis);
    }
}

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