• 締切済み

JavaのsetVisibleについて質問です

JavaでPC用の簡単なゲームアプリを作っています。 1.タイトル画面が表示される 2.スタートボタンを押す 3.タイトル画面からゲーム画面になる 4.ゲームが始まる という風になっているのですが、 ゲームが始まった後、キー入力もマウス入力にも反応しません。 一度ゲームウィンドウ以外をクリックした後、 ゲームウィンドウをクリックすると反応するようになります。 ゲームが始まった後の反応しないのを改善する方法が分からず困っております。 setVisibleの書き方が悪いのかと思っているのですが、よく分かりません。 Javaに詳しい先輩方、どうかお力をお貸しください。よろしくお願いいたします。 https://www.dropbox.com/s/q2v2fm2dc6mmfft/PuyoPJ.java?dl=0

みんなの回答

  • KSOH
  • ベストアンサー率93% (29/31)
回答No.2

MainPanelの実装が不明なので推測です。 KeyEventがこない原因はフォーカスがMainPanelに移動していないことが原因と思います。例えば入力を受け付けるようなコントロールが全くない単なるJComponentとかレイアウトコンテナ(JPanelなど)だったりするとデフォルトではフォーカスを必要しないとみなされフォーカスは移動してこないので、そういったことが原因ではないでしょうか。とりあえずの対処は例えば以下のようにすることです。 mainPanel = new MainPanel(); add(getContentPane(), BorderLayout.CENTER); mainPanel.setFocusable(true); // MainPanelのコンストラクターに書くべきかな mainPanel.requestFocusInWindow(); // とりあえず直接フォーカスを要求する 上の例はコメントに書いてあるようにテキトーな方法です。ちゃんと作るには以下のURLなどでフォーカスの仕組みを理解した上で実装すべきかと思います。 http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html MouseEventはどうして配送されてこないかはわかりません。試しにやってみましたがMouseMotionEventとかMousePressedとかは配送されるようですが。MouseEventのハンドラーの実装に何かミスがあるくらいしか思いつきません。

  • usami33
  • ベストアンサー率36% (808/2210)
回答No.1

関連するQ&A