Ein Kreis als Graphics2D oder als Ellipse2D Objekt

Status
Nicht offen für weitere Antworten.

Dit_

Bekanntes Mitglied
Hallo!

Ich habe drei Klassen Kreis, Rechteck und Linie.

Klasse Kreis zB gibt mit gebeFigur() ein Ellipse2D Objekt zurueck.

Nach Aufgabestellung soll sich jede Figur selbst zeichnen... Eine andere Klasse bekommt eine Liste mit Figuren und zeichnet diese auf dem panel... mit draw(..) wahrscheinlich.
Java:
public class Tafel extends JPanel {
...
		public void paintComponent(Graphics gr) {
		Graphics2D gr2d = (Graphics2D) gr;
		gr2d.draw(figurenListe[0].gebeFigur()); //so als Beispiel
		}
...
}
	}

Rechteck und Kreis sollen ausgefüllt dargestellt werden, das heisst dass man zB die methode void fillOval(int x, int y, int w, int h) benutzen soll. Da jede Figur sich selbst zeichnen soll, muss wohl die Klasse Oval ein Graphics2D Objekt zurückgeben?
Wenn ja, dann kann ich draw(..) nicht mehr benutzen, da draw nur die Shape Objekte als parameter erwartet... :shock:

Hat jemand eine Idee?

Danke schon mal :)
 

Dit_

Bekanntes Mitglied
Java:
figurenListe[0].zeichne(gr2d);

ja genau das habe ich ja in meiner Klasse Kreis

Java:
public class Kreis {
...
	public void zeichne() {
		oval = new Ellipse2D.Double(startPunkt.getX(), startPunkt.getY(),
				breite, hoehe);

	}
...
}

die frage ist ja, wo nutze ich die void fillOval(int x, int y, int w, int h) ?
 

Dit_

Bekanntes Mitglied
axoooo du meinst wahrscheinlich ich soll einfach an die methode zeichne die Referenz übergeben. Die Klasse Kreis gibt gar nichts zurück! oder ?
 

Wildcard

Top Contributor
In paintComponent bekommst du das Graphics Objekt und diese Objekt reichst du an die zeichne Methode deiner Figuren durch. Ein Graphics Objekt ist wie ein Pinsel der auf eine Leinwand ausgerichtet ist. Jeder deiner Figuren muss nun den Pinsel schwingen, aber dafür musst du ihnen einen geben.
 

Dit_

Bekanntes Mitglied
ok danke sehr!
und letzte Frage. Wer und vor allem wie schwindet den Pinsel zur FarbenPalette?

Java:
public void zeichne(Graphics2D gr) {
		gr.setColor(Color.RED);
		gr.fillOval(x,y, w, h);

	}

so richtig ?
 
Zuletzt bearbeitet:

Wildcard

Top Contributor
Müsstest du doch beim ausführen sehen ob richtig, oder nicht? ;)
Sollte passen, aber ich dachte eigentlich deine Figur hat ein Java Shape? Wenn ja, zeichne direkt das Shape anstatt drawOval.
 

Dit_

Bekanntes Mitglied
ok farben setzte geht :) Problem ist nur das die Objekte, Kreis zB zu kantig sind... und zeichen Shape direkt, weiss nicht was du meinst :) kenne nur draw(..), oder fillOval(..) :)
 

Wildcard

Top Contributor
genau... draw(Shape)
Kanten bekommst du durch Antialiasing weg. Das musst du als rendering hint im Graphics Objekt setzen
 

Dit_

Bekanntes Mitglied
ok danke läuft...

was mache ich aber mit negativer Breite ? Objekte mit negativer Breite werden nicht gezeichnet :(
 

Wildcard

Top Contributor
Was erwartest du denn? Ein Objekt mit negativer Breite ist nicht da.
Ich würde sagen ein Objekt das eine negative Breite gesetzt bekommt sollte direkt eine IllegalArgumentException werfen.
 

André Uhres

Top Contributor
Java:
public class Kreis {
...
	public void zeichne() {
		oval = new Ellipse2D.Double(startPunkt.getX(), startPunkt.getY(),
				breite, hoehe);

	}
...
}
In einem systemausgelösten Malvorgang, bittet das System eine Komponente, ihren Inhalt darzustellen, normalerweise aus einem der folgenden Gründe:
  • Die Komponente wird zum erstenmal sichtbar auf dem Bildschirm abgebildet.
  • Die Komponente wird in der Größe verändert.
  • Die Komponente wurde beschädigt und muß repariert werden (zum Beispiel wurde etwas verschoben, das vorher die Komponente verdeckte, und ein vorher verdeckter Teil der Komponente wird sichtbar).
In allen drei Fällen ruft das System automatisch die paintComponent Methode der Komponente auf. Es leuchtet ein, daß paintComponent möglichst schnell reagieren sollte, daher werden wir "teure" Sachen dort vermeiden wollen, wie z.B neue Objekte erzeugen:
Java:
...
public class Kreis {
    private final Ellipse2D.Double oval;
    private Point startPunkt;
    private double breite;
    private double hoehe;
    public Kreis(final Point startPunkt, final double breite, final double hoehe) {
        this.startPunkt = startPunkt;
        this.breite = breite;
        this.hoehe = hoehe;
        oval = new Ellipse2D.Double();
    }
    public void zeichne(final Graphics2D g) {
        //hier sollten wir kein neues Ellipse2D.Double Objekt erzeugen!
        oval.setFrame(startPunkt.getX(), startPunkt.getY(), breite, hoehe);
        g.draw(oval);
    }
...
}
 

Dit_

Bekanntes Mitglied
Ich würde sagen ein Objekt das eine negative Breite gesetzt bekommt sollte direkt eine IllegalArgumentException werfen.

so kannst du aber nicht mit der Maus nach Links zeichnen.

ok das mit negativer Breite ist halb so schlimm...

@André danke für den Tipp.

noch eine Frage hätte ich noch:

wie selektiert man dann das Oval?
 

andre111

Bekanntes Mitglied
Wenn ich das mit dem "nach links ziehen" richtig verstehe, dann musst du eben die Breite positiv setzen und die x-Position nach links verschieben.
 

Dit_

Bekanntes Mitglied
Wenn ich das mit dem "nach links ziehen" richtig verstehe, dann musst du eben die Breite positiv setzen und die x-Position nach links verschieben.

Position x ist aber fest und kann nicht verschoben werden. Wie gesagt das ist erstmal unwichtig.

Mich würde aber interessieren wie ich mein Oval nach dem fill(oval); selektieren kann.
 

Wildcard

Top Contributor
Das Panel/Canvas von dem das Graphics Objekt kommt registriert einen MouseListener. Bei Klick fragst du alle deiner Figuren ab, ob sie den Klickpunkt enthalten. Wenn ja, selektierst du das betreffende.
 

Dit_

Bekanntes Mitglied
Das Panel/Canvas von dem das Graphics Objekt kommt registriert einen MouseListener. Bei Klick fragst du alle deiner Figuren ab, ob sie den Klickpunkt enthalten. Wenn ja, selektierst du das betreffende.

ja schon klar, aber wie? ich meine, shape hat ja keine Funktion wie zum Beispiel oval.setSelected(); :)
muss ich dann ein graues rechteck auf mein Oval legen?
 

Wildcard

Top Contributor
Deine Figur muss das leisten. Sie hat zb eine setSelected(boolean) Methode. Wenn eine Figur selected ist, zeichnet sie vielleicht in einer anderen Farbe, oder zeichnet ein zusätzliches Rechteck, das liegt an dir.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W JavaFX Ich kann keinen Kreis richtig zeichnen AWT, Swing, JavaFX & SWT 8
L 2D-Grafik Linie von Kreis zu Kreis AWT, Swing, JavaFX & SWT 3
S Kreis vergrößern/verkleinern mit Buttons AWT, Swing, JavaFX & SWT 1
S GUI Kreis zeichnen AWT, Swing, JavaFX & SWT 13
M JavaFX Bild zur ImageView in einem Kreis anzeigen. AWT, Swing, JavaFX & SWT 4
L 2D-Grafik Dreieck in einem Kreis??? AWT, Swing, JavaFX & SWT 1
T Swing / Kreis zeichnen AWT, Swing, JavaFX & SWT 2
G Mehrere Strings um Kreis zeichnen und positionieren AWT, Swing, JavaFX & SWT 0
D Swing Manuellen Kreis zeichen AWT, Swing, JavaFX & SWT 22
T Kreis in Jlabel darstellen. AWT, Swing, JavaFX & SWT 13
J Grafik (Kreis) schneller bewegen? AWT, Swing, JavaFX & SWT 6
E Kreis-Mal-Programm AWT, Swing, JavaFX & SWT 7
S Kreis in Kreis AWT, Swing, JavaFX & SWT 5
P Elemente im Kreis aufstellen AWT, Swing, JavaFX & SWT 5
M 2D-Grafik "Unvollständiger" Kreis(kontur) AWT, Swing, JavaFX & SWT 8
T Einen Kreis anzeigen AWT, Swing, JavaFX & SWT 14
B 2D-Grafik Text in einem Kreis zentrieren AWT, Swing, JavaFX & SWT 3
Semox 2D-Grafik Radialer Verlauf in einem Kreis AWT, Swing, JavaFX & SWT 4
T 2D-Grafik Kreis "von Hand" zeichnen -> jedesmal repaint()? AWT, Swing, JavaFX & SWT 6
P Swing FocusTraversalPolicy dreht sich im Kreis AWT, Swing, JavaFX & SWT 2
J Java2D Kreis/Kurven Frage AWT, Swing, JavaFX & SWT 2
Semox Swing Kreis löschen durch Mausklick in der Nähe AWT, Swing, JavaFX & SWT 2
K Wenn Mauszeiger in der Nähe vom Kreis, soll Kreis an eine andere Stelle springen AWT, Swing, JavaFX & SWT 8
Spin Hilfe - Erklärungsbedarf für Kreis AWT, Swing, JavaFX & SWT 5
H Punkte im Kreis AWT, Swing, JavaFX & SWT 3
G kreis malen -> welche funktion? AWT, Swing, JavaFX & SWT 3
G Farbe ändern bei Klick auf einen Kreis AWT, Swing, JavaFX & SWT 5
M Kreis mit gedrückter Maus bewegen AWT, Swing, JavaFX & SWT 20
U Farbe von Kreis AWT, Swing, JavaFX & SWT 3
G Kreis zeichnen und mit Maus ziehen AWT, Swing, JavaFX & SWT 3
S Kreis als JFrame AWT, Swing, JavaFX & SWT 9
TheJavaKid Kreis, Rechteck, Linie. verschieben AWT, Swing, JavaFX & SWT 5
T Kreis ActionListener AWT, Swing, JavaFX & SWT 5
U Was ist ein Shape, also klar ein Objekt, aber was ist damit gemeint (Graphics2d)? Und was sidn affinetransformationen AWT, Swing, JavaFX & SWT 1
L Graphics2d zoomen AWT, Swing, JavaFX & SWT 3
L AWT graphics2d transform AWT, Swing, JavaFX & SWT 7
M Schnittpunkte zwischen zwei Graphics2D Elemente ermitteln. AWT, Swing, JavaFX & SWT 5
Soloeco Graphics2D - Verbinden zweier Punkte AWT, Swing, JavaFX & SWT 6
B Graphics -> Graphics2D etwas zu beachten? AWT, Swing, JavaFX & SWT 8
D AWT Graphics2D getClip gibt null zurück AWT, Swing, JavaFX & SWT 3
B Graphics2D Componente Drehen AWT, Swing, JavaFX & SWT 2
M Graphics2D: drawString Berechnung AWT, Swing, JavaFX & SWT 1
X AWT Graphics2D zum LWJGL Display hinzufügen aber wie? AWT, Swing, JavaFX & SWT 4
D Graphics2D einen Bereich füllen AWT, Swing, JavaFX & SWT 1
M JPanel und Graphics2D AWT, Swing, JavaFX & SWT 2
S Java2D/Graphics2D in Android..? AWT, Swing, JavaFX & SWT 2
B Graphics2d drawString mit double Werten? AWT, Swing, JavaFX & SWT 5
S Graphics2D: Transparent übereinander zeichnen AWT, Swing, JavaFX & SWT 7
S Graphics2D - setClip() AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Graphics2D object in ein anderes Zeichnen AWT, Swing, JavaFX & SWT 7
S AWT Pong - Probleme mit übergreifenden Objekten && Graphics2D AWT, Swing, JavaFX & SWT 3
C Image mit Graphics2D zeichnen AWT, Swing, JavaFX & SWT 9
S Frage zu Graphics2D AWT, Swing, JavaFX & SWT 3
Developer_X Swing Auf ein BufferedImage mit Graphics/Graphics2D zeichnen AWT, Swing, JavaFX & SWT 6
N AWT Graphics2D mehrmals aufrufen AWT, Swing, JavaFX & SWT 5
Developer_X Swing Graphics2D.zoom, wie rückgängig machen? AWT, Swing, JavaFX & SWT 6
Developer_X Swing Graphics2D translate zerstört performance AWT, Swing, JavaFX & SWT 2
N graphics2d auf panel AWT, Swing, JavaFX & SWT 2
0 AWT Graphics2D.drawImage() funktioniert nicht mehr korrekt mit Core i7 AWT, Swing, JavaFX & SWT 4
A Swing LAF unter Windows: javax.swing.DebugGraphics cannot be cast to java.awt.Graphics2D AWT, Swing, JavaFX & SWT 5
A Swing Mit Graphics2D auf transparentem Hintergrund zeichnen AWT, Swing, JavaFX & SWT 7
E Graphics2D: altes Objekt löschen, wenn repaint aufgerufen wird AWT, Swing, JavaFX & SWT 7
D BufferedImage und Graphics2D AWT, Swing, JavaFX & SWT 3
cowabunga1984 Implementierung von Graphics2D AWT, Swing, JavaFX & SWT 2
C Graphics2D, Text abschneiden AWT, Swing, JavaFX & SWT 2
N Graphics2D mit unterschiedlichen Grauwerten befüllen AWT, Swing, JavaFX & SWT 3
F Graphics2D scale und Positionierung einer TextArea AWT, Swing, JavaFX & SWT 8
F JPanel: Graphics2D, scale und Mauskoordinaten AWT, Swing, JavaFX & SWT 4
P paintComponent /paint/ update/ offscreenImage / Graphics2D / AWT, Swing, JavaFX & SWT 4
M Graphics2D - abstract void draw(.) AWT, Swing, JavaFX & SWT 2
redztripe Graphics2D rotieren und rotiertes Bild abspeichern AWT, Swing, JavaFX & SWT 2
R AffinrTransform + Graphics2D verschieben AWT, Swing, JavaFX & SWT 3
R Graphics2D + Bild anzeigen. AWT, Swing, JavaFX & SWT 25
M Probleme mit Graphics2D AWT, Swing, JavaFX & SWT 7
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
R Ellipse2D ändert Größe AWT, Swing, JavaFX & SWT 3
H Ellipse2d zum path hinzufügen AWT, Swing, JavaFX & SWT 4
G Ellipse2D.Double funktioniert nicht AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben