Wert einer Variable in paint-Methode verwenden

DMG

Mitglied
Hallo zusammen,

ich habe folgendes Problem und hoffe, dass mir jemand weiterhelfen kann:

In meiner Klasse lese ich in einer Methode Werte aus einer Excel-Datei ein. Nun würde ich gerne diese Werte in der paint-Methode dafür verwenden, um bei einem zu zeichnenden Rechteck (drawRect() ) die Höhe des Rechtecks von dem eingelesenen Wert abhängig zu machen. Innerhalb der paint-Methode bekomme ich jedoch keinen Zugriff auf die eingelesenen Werte...

Wann genau wird denn die paint-Methode ausgeführt? Durch zahlreiche System.out.println()-Anweisungen habe ich bereits den Verdacht, dass die paint-Methode vor der anderen Methode durchgeführt wird. Stimmt das? Liegt dann hier mein Problem, dass zum Zeitpunkt zu dem die paint-Methode durchgeführt wird, die eingelesenen Werte noch gar nicht vorhanden sind?!?

Hat jemand eine Idee, wie ich das Problem lösen kann?? Falls das oben beschriebene nicht ganz einleuchtet, jetzt noch einmal das Problem auf den Punkt gebracht: Wie kann ich in der paint-Methode den Wert einer Variablen einer anderen Methode verwenden??

Schonmal vielen Dank für Hilfestellungen, Ideen oder sogar Lösungen!!
 
Hallo 🙂

Wenn die Variablen in der anderen Methode eingelesen werden, kannst du sie in paint nicht verwenden, falls du sie nicht woanders speicherst. Beim Verlassen einer Methode werden alle lokalen Variablen der Methode gelöscht.

Der übliche Lösungsweg wäre, dass du eine Methode hast, die die Werte einliest und in Instanzvariablen speichert, sodass sie ab diesem Zeitpunkt permanent zur Verfügung stehen. Du könntest dir zum Beispiel eine Map erstellen, die von den benötigten Objekte auf deren Höhe abbildet und das in paint() benutzen.

Du hast Recht, dass paint() schon vor deiner Methode aufgerufen wird - allgemein solltest du dich bei paint auf gar nichts verlassen, was die Zeitpunkte der Aufrufe betrifft - sorg einfach dafür, dass es *immer* aufgerufen werden darf. Das machst du, indem du einfach innerhalb von paint prüfst, ob die Daten schon gelesen werden - wenn nicht, machst du in paint einfach nix oder zeichnest "Daten noch nicht bereit" in das Feld oder so.

PS: Falls du Swing benutzt, solltest du paintComponent() und nicht paint() überschreiben, paint() gehört zu AWT und sollte in Swing-Code nicht berührt werden.
 
Du kannst paint auch einfach noch mal aufrufen durch die repaint() Methode. Die schreibst du einfach irgendwo hin und die ruft dann noch mal deine paint Methode auf (oder eben die paintComponent()).
 

Zurück
Oben