2016-04-05 7 views
0

Zunächst einmal bin ich neu in Java und Sie werden wahrscheinlich in der Lage sein zu erraten. Danke im Voraus.Warten auf einen JFrame und dann Abrufen von Informationen

Ich schreibe gerade ein Brettspiel mit Java für eine Aufgabe. Es gibt menschliche und Computer-Player-Klassen, und die GUI nur in der menschlichen Spieler-Klasse. In der menschlichen Klasse verwende ich eine Klasse namens "UI", die JFrame erweitert, wo der Benutzer ein Stück auswählt.

Momentan wartet diese Benutzeroberflächenklasse auf das Drücken der Eingabetaste und setzt dann eine 'done'-Variable auf' true '. In der menschlichen Spielerklasse erstelle ich diese UI und warte dann in einer while-Schleife, indem ich diesen booleschen Wert kontinuierlich überprüfe, bevor ich die X/Y-Position der Bewegung erhalte.

while (!input.moveEntered()); 
move.setPosition(input.getX(), input.getY()); 

Dies scheint nur zu funktionieren, wenn die While-Schleife nicht leer ist. Wenn ich eine Druckanweisung dort hinzufüge, funktioniert es gut. Es scheint, als gäbe es einen viel besseren Weg. Ich habe in Dialoge geschaut, aber ich schließe das Fenster nicht jedes Mal, wenn eine Bewegung eingegeben wird.

Danke fürs Lesen.

+0

GUI sind ereignisgesteuert, vielleicht sollten Sie stattdessen ein [Observer Pattern] (http://www.oodesign.com/observer-pattern.html) in Betracht ziehen, dies wird Ihnen erlauben, das zu befreien GUI-Thread zum Aktualisieren der Benutzeroberfläche. Sie könnten auch in Betracht ziehen, [Parallelität in Java] (http://docs.oracle.com/javase/tutorial/essential/concurrency/) – MadProgrammer

Antwort

2

Sie sollten nie beschäftigt sein - warten; In deinem Fall würde ich einen modalen JDialog zeigen. Wenn der Benutzer seine Eingabe eingegeben hat, endet die setVisible (true) -Methode ohne busy-waiting.

Oder vielleicht habe ich Ihr Problem missverstanden und Sie müssen nur einen Ereignis-Listener in Ihrem Haupt-JFrame definieren, um Benutzereingaben zu verarbeiten. Werfen Sie einen Blick auf http://www.tutorialspoint.com/swing/swing_event_listeners.htm

+0

Plus eins für alles vor * "Oder vielleicht .." *. Ein modaler Dialog ist der Weg dorthin. –

+0

Vielen Dank für die Hilfe. JDialogs funktionieren, aber im Idealfall möchte ich, dass das Fenster geöffnet bleibt, nachdem der Benutzer die Eingabetaste gedrückt hat. Ich glaube, ich habe mich nicht sehr gut erklärt. Grundsätzlich wird dieser JFrame/Dialog aus dem Haupt-Thread gestartet und zeigt dem Benutzer die (zunächst leere) Karte an, der dann einen Cursor über seine gewünschte Position bewegt und Enter drückt. Ich bin mir nicht sicher, wie ich darauf warten soll, dass der Benutzer seine Auswahl tatsächlich trifft, ohne in einer Schleife zu warten oder JDialogs zu verwenden (wodurch das Fenster geschlossen und sofort wieder geöffnet wird, nachdem der Computer die Wahl getroffen hat) – errorc2146

Verwandte Themen