![]() |
Eine sich ändernde Variable holen
Nabend Dudes,
ich habe einen KeyListener für ein jTextField in der Klasse Game und möchte nun immer das aktuelle Wort, was gerade angezeigt wird, bei einem KeyRelease ausgeben. Um es mal simpel zu veranschaulichen (unwichtigen Code gelöscht): Game.java: Code:
public class Game extends JPanel{Code:
|
Aus dem Beispiel werden einige Dinge nicht ganz klar.
Die paintComponent wird unteranderem dann aufgerufen, wenn:
Wenn du aber jedesmal new Game().str aufrufst wird jedes mal ein neues Game-Object erzeugt. Bei dem erzeugen Object wird die paintComponent aber niemals aufgerufen also wird der String auch nicht gesetzt. |
Quote:
Zur Erläuterung: declareWord() ist eine Methode, die ein String zurück liefert, welcher vorher zufällig aus einer Liste gewählt wurde, welche nicht "boo"enthält. |
also was ist das ziel? du möchtest wenn der benutzer in dem TextField fertig getippt hat was auch immer dadrinnen steht auswerten?
bei keyReleased bekommst du nach jedem einzelnen char schon ne rückmeldung, eher suboptimal mMn, kann man aber mit arbeiten. zeig uns doch erstmal deinen Konstruktor von Game. Zudem musst du um dein ziel zu erreichen nichts weiter als den konstruktor von Game anpassen, du brauchst die paintComponent nicht Overriden(was in deinem stück code auch fehlt). |
Quote:
Quote:
|
wie schon gesagt, ist dein painComponent Schwachsinn. zu der zeit wo du das ding initialisierst hat es keine Größe. die Größe bekommt es erst vom frame, sobald es visible ist, dann zeichnest du zwar, aber nur ein mal und danach nie wieder außer du erzwingst einen repaint, was du in dem gezeigten code nicht tust. Zudem hast du eine Bedingung drinnen, welche man mit dem code nichtmal nachvollziehen kann.
natürlich falsch: Code:
public class KeyEventListener implements KeyListener {Code:
public static void main(){ |
Quote:
Quote:
Edit: Hab's mal geändert |
du verstehst deinen code ja nichtmal, du erzeugst dir in deinem listener, was total schwachsinnig ist und was ich auch nicht gezeigt habe, weiterhin ein Game Objekt. Dieses zeichnet sich NIE! du hast es zwar, aber es liegt auf keinem frame.
bevor du hier weiter machst solltest du dir erstmal swing beibringen. du wirst immer boo heraus bekommen wenn du dein jpanel nicht in ein frame, welches visible ist, legst. ich weiß nicht wo du dein frame erzeugst, aber dort MUSST du dein Game erzeugen UND Game deinem frame hinzufügen. so wie du es im moment zeigst ruft sich paintComponent nie auf, weil JPanel sich nur malt, wenn es vom frame dazu den Aufruf bekommt, oder du eben game.PaintComponent aufrufst, aber da du keinen gültigen Graphics hast wird das nicht klappen. |
Quote:
Hier mal den kompletten Quellcode: Game.java (Spoiler):
KeyEventListener.java (Spoiler):
Habe in deinem Vorschlag übersehen, dass du das Game-Objekt in der Main-Methode erstellst. Meine Main-Methode ruft die startGame()-Methode der Game-Klasse auf. Ich weiß nicht so ganz, wie ich das jetzt umsetzen soll. |
das erste problem ist, dass du bei startGame
Code:
game.add(new Game());Code:
Game something = new Game();listener würde man so oder so entweder als innere class oder direkt als anonyme class bauen, damit sie eben zugriff auf alles in der klasse haben. dein problem mit der extra class für den KeyListener ist, dass du dein Objekt von Game public setzen musst, dies kann man durch innere oder anonyme klassen umgehen. du hast genau 1 Game-Objekt welches gezeichnet wird, dies liegt in deiner startGame, deswegen musst du auch auf das Objekt zugreifen und kein neues erstellen, weil die anderen nicht gezeichnet werden. hoffe soweit verständlich |
Quote:
Cheers |
#closed on request
problem solved |
| All times are GMT +2. The time now is 14:28. |
Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.