如何使用KeyListener

DSd*_*dDS 4 java awt keylistener

我正在尝试在我的程序中实现一个keylistener,这样当我按下一个箭头键时它会执行一个动作,程序中的对象向左或向右移动.

这是我程序中的移动方法

public void moveDirection(KeyEvent e)
    {
        int move = 0;
        int r = K.getRow();
        int c = K.getCol();
        if (e.getKeyCode() == 39) move = 1; //KeyEvent.VK_RIGHT
        if (e.getKeyCode() == 37) move = 2; //KeyEvent.VK_LEFT
        //if (e.getKeyCode() == KeyEvent.VK_DOWN) move = 3;

        switch (move)
        {
            case 1: if (inBound(r, c+1))
                        K.setLocation(r ,c+1); 
                    if (inBound(r, c-1) && frame2[r][c-1] == K)
                        frame2[K.getRow()][K.getCol()-1] = null; 
                    break; //move right 39
            case 2: K.setLocation(K.getRow(), K.getCol()-1); break; //move left 37
            //case 3: b.setLocation(b.getRow()+1, b.getCol()); break; //move down
            default: return;
        }        
        processBlockList();
    }
Run Code Online (Sandbox Code Playgroud)

我想知道程序应该如何读入(KeyEvent)e.我真的不能输入一个箭头键....

请帮忙!

编辑:我还需要知道我需要添加到我的代码中,以便我的程序等待大约700毫秒的密钥输入,然后再转到另一个方法

Abh*_*ary 11

http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html 查看本教程

如果它是一个基于UI的应用程序,那么"我还需要知道我需要添加到我的代码中,以便我的程序在转到另一个方法之前等待大约700毫秒的密钥输入"你可以使用GlassPane或Timer类来实现需求.

对于关键事件:

public void keyPressed(KeyEvent e) {

    int key = e.getKeyCode();

    if (key == KeyEvent.VK_LEFT) {
        dx = -1;
    }

    if (key == KeyEvent.VK_RIGHT) {
        dx = 1;
    }

    if (key == KeyEvent.VK_UP) {
        dy = -1;
    }

    if (key == KeyEvent.VK_DOWN) {
        dy = 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

查看此游戏示例http://zetcode.com/tutorials/javagamestutorial/movingsprites/


COD*_*BOY 8

这是一个SSCCE,

package experiment;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class KeyListenerTester extends JFrame implements KeyListener {

    JLabel label;

    public KeyListenerTester(String s) {
        super(s);
        JPanel p = new JPanel();
        label = new JLabel("Key Listener!");
        p.add(label);
        add(p);
        addKeyListener(this);
        setSize(200, 100);
        setVisible(true);

    }

    @Override
    public void keyTyped(KeyEvent e) {

        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            System.out.println("Right key typed");
        }
        if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            System.out.println("Left key typed");
        }

    }

    @Override
    public void keyPressed(KeyEvent e) {

        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            System.out.println("Right key pressed");
        }
        if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            System.out.println("Left key pressed");
        }

    }

    @Override
    public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            System.out.println("Right key Released");
        }
        if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            System.out.println("Left key Released");
        }
    }

    public static void main(String[] args) {
        new KeyListenerTester("Key Listener Tester");
    }
}
Run Code Online (Sandbox Code Playgroud)

另外阅读以下链接:如何编写密钥监听器以及如何使用密钥绑定