3

私はこのコードを持っています:

    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;

    import javax.swing.JApplet;


    public class applet extends JApplet implements KeyListener, MouseListener{
        int a = 0;
        int b = 0;
        public void init(){
            setSize(500,500);
            addKeyListener( this );
             addMouseListener( this );
        }
        public void paint(Graphics g){
            g.setColor(Color.BLUE);
            g.fillRect(a, b, 400, 400);
        }
        @Override
        public void keyPressed(KeyEvent e) {
        System.out.println("Hello!")    
switch(e.getKeyCode()){
                case KeyEvent.VK_DOWN: a -= 5;
                break;
                case KeyEvent.VK_UP: a += 5;
                break;
                case KeyEvent.VK_RIGHT: b += 5;
                break;
                case KeyEvent.VK_LEFT: b -= 5;
                break;
            }
            repaint();
        }
        @Override
        public void keyReleased(KeyEvent e) {
            // TODO Auto-generated method stub

        }
        @Override
        public void keyTyped(KeyEvent e) {
            // TODO Auto-generated method stub

        }
        @Override
        public void mouseClicked(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }
        @Override
        public void mouseEntered(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }
        @Override
        public void mouseExited(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }
        @Override
        public void mousePressed(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }
        @Override
        public void mouseReleased(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }
    }

私のデバッグprintlnコードからわかるように、switchステートメントに到達していません。なぜこれが起こっているのですか? これを修正するにはどうすればよいですか? 私はこのトピックの完全な初心者なので、これが広すぎる場合でも嫌いにならないでください

4

1 に答える 1

6

KeyListener登録されているコンポーネントがフォーカス可能で、フォーカスがある場合にのみイベントを発生させます。

JAppletアプレットの上にコンテンツ ペインを (とりわけ)JRootPane追加するがあります。これは、キー リスナーがイベントの通知を開始できない可能性があることを意味します (他の要素がそれをブロックしているため)。JLayeredPane

代わりに、キーバインディングを使用してください

于 2013-07-16T00:15:14.347 に答える