# paintComponent() , Parameter



## Batikan (12. Mrz 2009)

Hallo!
Bin ein Anfänger im Punkto Java. Habe ein kleines Spiel programmiert, indem es darum geht Städte auf einer Landkarte anzuklicken.
Mein Problem: Die Methode paintComponent empfängt nur ein Objekt.
Ich möchte jedoch weitere Parameter übergeben können um Abgrenzungen bei der Zeichnung machen zu können.

Bsp: paintComponent(endpunkte);
paintComponent(endpunkte, parameter1, parameter2,..); Geht nicht?!?!

Ziel: Verschiedene paint Methoden aufrufen.
Momentan baue ich die Logik in die paintComponent Methode ein. Halte ich aber nicht für besonders Effizient.

2 Aufrufe sind entscheidend. Einmal nur den angeklickten Punkt anzeigen und einmal mit einer Linie zwischen diesen beiden. Ich schaffe es nicht zunächst den angeklickten Punkt anzeigen zu lassen und anschließend das Gesamte.

Noch ein Problem: Wenn ich das Fenster minimiere, ist das gezeichnete einfach weg. Was für ein Handling muss denn da einbauen?

Ich hoffe mein Anliegen ist verständlich. Ich bedanke mich schonmal für eure Hilfen.

LG Batikan


----------



## SlaterB (12. Mrz 2009)

hast du 
Graphics g = getGraphics();
und zeichnest du auf diesem g herum?
das ist schlecht, verwende nur repaint() und lasse die Standard-paintComponent(Graphics g)-Methode alles zeichnen,
bei jedem repaint() fängt die von 0 an, auch nach Minimieren, diese Situation macht also keinen Unterschied,

von paintComponent(Graphics g) kannst du gerne andere Methoden aufrufen,
zur Vermeindung von Verwirrung wäre es aber geschickt, diese NICHT auch paintComponent(xy) zu nennen

edit:
Zeichnen in Swing Tutorial - java-forum.org


----------



## hdi (12. Mrz 2009)

Die Logik gehört nicht da rein. Wenn du zuerst einen Punkt zeichnen willst,
und dann eine Linie, brauchst du wohl 2 Variablen.
Wenn sie beide != null sind, malste ne Linie mit g.drawLine(),
wenn nur einer != null ist, malst du halt nur den Punkt mit g.drawOval().

Musst halt die Variablen beim Klick immer resetten.

Ansonsten, wenn du nur einen bestimmten Bereich neu malen willst,
hilft ein repaint(Rectangle). Er zeichnet dann nur innerhalb des Rectangles
neu.


----------

