2016-04-05 22 views
0

まず最初に私はJavaを初めて使い、おそらく推測できるでしょう。前もって感謝します。JFrameを待ってから情報を取得する

私は現在、割り当てを行うためにJavaを使用してボードゲームを書いています。ヒューマン・プレイヤー・クラスにはヒューマン・クラスとコンピューター・プレーヤー・クラスがあり、GUIはそのクラスだけです。人間のクラスでは、ユーザーがピースを選択するJFrameを拡張する「UI」というクラスを使用します。

このUIクラスは、入力ボタンが押されるのを待ってから、「done」変数をtrueに設定します。人間のプレーヤクラスでは、このUIを作成してから、移動のX/Y位置を取得する前に、このブール値を継続的にチェックしながらwhileループを待機します。

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

これは、whileループが空でない場合にのみ有効です。そこにprintステートメントを追加するとうまくいきます。 これについてもっと良い方法があるようです。私はダイアログを調べましたが、移動が入力されるたびにウィンドウを閉じません。

読んでいただきありがとうございます。

+0

GUIはイベント駆動型です。代わりに[オブザーバーパターン](http://www.oodesign.com/observer-pattern.html)を使用することを検討してください。 GUIスレッドを使用してUIを更新します。また、[Javaの並行性](http://docs.oracle.com/javase/tutorial/essential/concurrency/) – MadProgrammer

答えて

2

あなたは忙しく待つべきではありません。あなたの場合、私はモーダルJDialogを表示します。ユーザーが入力を入力すると、ビジー待機せずにsetVisible(true)メソッドが終了します。

あなたの問題を誤解しているかもしれません。ユーザーの入力を処理するために、メインJFrameにイベントリスナーを定義する必要があります。見てください http://www.tutorialspoint.com/swing/swing_event_listeners.htm

+0

を見てみるのもいいかもしれません。モーダルダイアログがここに行く方法です。 –

+0

ありがとうございました。 JDialogsは機能しますが、ユーザーがenterを押した後にウィンドウを開いたままにしたいのが理想です。私は自分自身をとてもうまく説明していないと思う。基本的には、このJFrame/Dialogはメインスレッドから起動され、最初に空のボードがユーザに表示され、ユーザがカーソルを希望の位置に移動してenterを押します。私はループで待たずに、あるいはJDialogを使って実際に自分の選択をするのを待つ方法がわかりません(ウィンドウを閉じて、コンピュータが選択した後すぐに再び開くようにします) – errorc2146

関連する問題