0

JFrame を拡張するGUIクラスと、拡張する別の内部クラスKeyPressesがありますKeyAdapter。for のコンストラクターで、 toGUIのインスタンスを渡します。私が知る限り、これで十分ですが、何らかの理由で、キーを押しても呼び出されません。KeyAdapteraddKeyListener()

該当するコード:

public class GUI extends JFrame{
  public GUIMaze(Options options){
    addKeyListener(new KeyPresses());
    ...more code...
  }
  private class KeyPresses extends KeyAdapter{
     @Override
     public void keyPressed(KeyEvent e){
        ...code that is not being run...
     }
  }
}

奇妙なことは、リファクタリングを行う前に、このコードが機能していたことです。必要なものを削除したか、 と競合する何かを行っていますKeyPresses

私は 1 しか持っていませんがKeyListener、私のMouseListener作品はうまくいきます。

4

1 に答える 1

2

これは の一般的な問題KeyListenerです。は、アタッチされているKeyListenerコンポーネントがフォーカス可能で、キーボード フォーカスがある場合にのみイベントを発生させます。

代わりに、Key Bindings API を使用することをお勧めします。これにより、バインディングをトリガーするフォーカス レベルを決定するためのコントロールが提供されます。

于 2013-11-07T00:13:07.470 に答える