Wie kann man geometrische Grundformen wie Kreise, Ellipsen und Rechtecke zeichnen?
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.