getGraphics().setColor funktioniert nicht

Status
Nicht offen für weitere Antworten.

icarus2

Top Contributor
Ahoi!

Ich habe vorhin von jmd etwas Code geschickt bekommen, bei dem ich einen Fehler beheben soll. Leider konnte ich diesen nicht beheben. Das Problem ist, dass k.setColor(farbe) in Zeile 37 nicht funktioniert.

Ich habe vor kurzem hier im Forum gelesen, dass getGraphics() fast immer die falsche Lösung sei (wenn ich mich richtig erinnere hat das Lectron geschrieben).

Liegt das Problem wirklich daran oder nicht?

Wann kann getGraphics() verwendet werden? Habe leider beim Googlen nie wirklich einen Beitrag gefunden darüber, wann man getGraphics() verwenden soll/ kann.

Hier mal den Code:

[Java]
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;

public class KreiseKlicken extends Applet implements MouseListener {

public void init() {
addMouseListener(this);
}
public void paint(Graphics g) {
g.drawString("Quadrate zeichnen mit Klicken",10,10);
}
public void mousePressed(MouseEvent e) {
// Maus-Koordinaten abfragen
int xMouse = e.getX();
int yMouse = e.getY();
// Graphics Objekt holen
Graphics g = getGraphics();
// hier int-Zufallszahl zwischen 10 und 50 ausprogrammieren!
int groesse = (int)(10+Math.random()*40);
Color zufallsfarbe = new Color((int)Math.random()*256, (int)Math.random()*256,
(int)Math.random()*256);
zeichneQuadratMitDiagonalen(xMouse, yMouse, groesse,g, zufallsfarbe);
}
/* Die folgenden 4 Methoden werden als leere Methoden definiert. Sie müssen
im Applet definiert werden, da sie im Interface "MouseListener" spezifiziert
sind */
public void mouseReleased(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}

// Methode zeichneQuadratMitDiagonalen selber ausprogrammieren
// der angeklickte Punkt P(x,y) soll der Diagonalenschnittpunkt sein
// Farbe von Quadrat und Diagonalen gleich, aber zufällig
public void zeichneQuadratMitDiagonalen(int x, int y, int kantenlaenge, Graphics k, Color farbe) {
k.setColor(farbe);
k.drawRect(x-kantenlaenge/2, y-kantenlaenge/2,kantenlaenge, kantenlaenge);
k.drawLine(x-kantenlaenge/2, y-kantenlaenge/2,x+kantenlaenge/2, y+kantenlaenge/2);
k.drawLine(x-kantenlaenge/2, y+kantenlaenge/2,x+kantenlaenge/2, y-kantenlaenge/2);
}
}
[/Java]
 
> Wann kann getGraphics() verwendet werden? Habe leider beim Googlen nie wirklich einen Beitrag gefunden darüber, wann man getGraphics() verwenden soll/ kann.

einfach: nie,
es sei denn du bist wirklich so gut, dass du die Artikel schreibst, die bei google gefunden werden statt andersrum 😉

repaint()/ paint()/ paintComponent() funktioniert
 
Hmm, ok, ich glaube so weit bin ich noch nicht. Hoffe aber, dass das irgendwann mal wird 🙂


Danke für die Antwort.
 
Mann, das ganze lässt mir jetzt einfach keine Ruhe... ^^


Hier z.B. in diesem Tutorial wird auch getGraphics() verwendet und das sieht für mich wie ein Anfängertutorial aus.


Gut, da wird auch ein Objekt gross geschrieben ^^ Einfach falsch wie das da gemacht wird?

Tutorial... 3.2 den Code anschauen.


Falls das im Tutorial da wirklich falsch gemacht wird... könntest du mir bitte 2-3 Beispiele nennen, wofür man das gebrauchen kann... ich bin immer so neugierig ;-)
 
lies in dem Tutorial mal ab

> So haben Sie vielleicht bereits bemerkt, dass eine Zeichnung verschwindet, wenn Ihr Applet von einem anderen Fenster verdeckt wird und dann wieder von Ihnen sichtbar gemacht wird.

weiter

------

brauchen kann man es, so weit ich weiß, wenn man wie ein Film oder ein Spiel durchgehend 30x pro Sekunde etwas neu zeichnen möchte,

-----

wird denn zeichneQuadratMitDiagonalen() ausgeführt?
aber die Farbe ist falsch, immer schwarz oder wie?
werde es heute nicht mehr testen können
 
Zeichnen sollte man nur in dem man paint(Graphics g) bzw. paintComponent(Graphics g)
überschreibt. Den alles was man "ausserhalb" zeichnet verschwindet beim nächsten repaint() der Komponente.
Also statt der Methode zeichneQuadrat... eine Methode erzeugeQuadrat... verwenden, in der ein entsprechendes Objekt erzeugt und z.B. in einer Liste gespeichert wird. In der paint(...) die Liste abarbeiten und die darin gespeicherten Objekte zeichen.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben