0

矢印キーなどの基本的なキーボード入力機能を取得しようとしています。しかし、私が試みたものは何も機能していないようです.KeyListenerインターフェースを使用してきました.入力をチェックするJPanelがフォーカスを取得し、エラーはないようです.

    public class PlayField extends JPanel implements KeyListener
    {
        private SpelModel mijnmodel;
        private boolean rechts = false;
        private boolean links = false;

        public PlayField(SpelModel mijnmodelArg)
        {
            setBackground(Color.WHITE); 
            mijnmodel = mijnmodelArg;
            this.setFocusable(true);
        }

        @Override
        public void paintComponent(Graphics g)
        {
            super.paintComponent(g); //some methods that i've taken out of the example
            drawStones(g,mijnmodel.getStenen());
            drawPeddle(g,mijnmodel.getBat());
            drawBall(g,mijnmodel.getBall()); 
        }
        @Override
        public void keyPressed(KeyEvent e){
            System.out.println("Key Pressed!!!");           
    }

    //Called when the key is released   
        @Override
    public void keyReleased(KeyEvent e){
        System.out.println("Key Released!!!");          
        }

        //Called when a key is typed
        @Override
        public void keyTyped(KeyEvent e){}
        }

問題は、複数のクラスを使用してウィンドウを作成していることでしょうか (最初に 1 つの JFrame、次に 2 つの JPanel を含む 1 つの JPanel、その上に「PlayField」クラスがあります)、別のパネル内でフォーカスを達成することは不可能ですか? 最善の行動方針は何ですか?

4

1 に答える 1

6

問題:

  • KeyListener を実装するクラスがありますが、どのコンポーネントにも KeyListener を追加していません。インターフェースを実装するだけでは十分ではありませんが、リッスンを行うには KeyListener をコンポーネントに追加する必要があります。
  • KeyListeners を使用する場合は、フォーカスの問題に注意する必要があります (前述のとおり)。KeyListener は、リッスンされているコンポーネントにフォーカスがある場合にのみ機能します。
  • KeyListeners は Swing アプリケーションでは避けるべきであり、Key Bindingsを使用したほうがよいでしょう。このサイトを簡単に検索すると、これに関する多くの議論が表示されます。これは、この質問が度も尋ねられ、回答されているためです。
  • 例: java-keylistener-not-registering-arrow-keys
于 2013-01-14T23:05:55.220 に答える