我想编一个按键方面的程序
比如:我按三下A健,等于我按了Q、W、E各一次
这种要怎么实现
我现在无从下手,告诉我应该用哪些知识也行

解决方案 »

  1.   

    首先肯定是要对键盘进行监听吧?
    下面是一个对键盘进行监听的类、
    而你所说的我按三下A健,等于我按了Q、W、E各一次。。
    这种规律你可以添加到一个Map中进行记录。
    每次按键的时候,先去map中找看是否符合这种规律的数据,如果存在则执行。。public class D extends JPanel{
        private static final long serialVersionUID = 453890560369815259L;
        private JFrame frame;
        private Container contentPane;
        private JButton button;
        public D(){
            frame=new JFrame();
            contentPane=frame.getContentPane();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(300, 300);
            frame.setVisible(true);
            init();
        }
        private void init(){
            contentPane.setLayout(null);
            button=new JButton("按钮");
            button.setBounds(50, 50, 80, 30);
            contentPane.add(button);
            frame.addKeyListener(new KeyListener(){
                @Override
                public void keyPressed(KeyEvent e) {
                    int keyCode=e.getKeyCode();
                    if(keyCode==KeyEvent.VK_UP){
                        System.out.println("up");
                    }else if(keyCode==KeyEvent.VK_DOWN){
                        System.out.println("down");
                    }
                }
                @Override
                public void keyReleased(KeyEvent e) {
                    // TODO Auto-generated method stub
                }
                @Override
                public void keyTyped(KeyEvent e) {
                    // TODO Auto-generated method stub
                }
            });
            frame.addFocusListener(new FocusListener(){
                @Override
                public void focusGained(FocusEvent arg0) {
                    // TODO Auto-generated method stub
                }
                @Override
                public void focusLost(FocusEvent arg0) {
                    // TODO Auto-generated method stub
                    frame.requestFocus();
                }           
            });
            frame.requestFocus();
        }
        public static void main(String[] args) {
            new D();
        }
    }
      

  2.   


    问题太泛了,没有应用场景,无法给出建议。比如说:
      如果只是为了显示在Console上,直接写三句println就完毕了。
      如果是要拦截另一个程序得到的按键输入,并篡改为QWE,想用Java难度就很高了。
      

  3.   

    楼主是想写一个LOL的按键外挂么?用纯Java不能实现这种系统级的程序,用C调用windows api写吧
      

  4.   

    KeyAdapter   KeyListener  这两个接口
      

  5.   

    可以使用java中的robot类和键盘监听类一起实现
      

  6.   

    需要一个buffer来记录你按了哪些键,可以用queue,有个timer来定时刷新这个quque。如果集齐三AAA黄金战神组合,就招唤QWE,然后开大点燃。
    或者用state。设state 0 1 2 3。初试为0,如果按A,进入state1,在按A 入2,然后3。在state3里执行QWE,java awt robot可以模拟keypress。 同样有个timer,比如一秒中没有接到任何按键,state归0。
      

  7.   

    借用了1楼大神的code,加了点东西,在field里加 int state = 0; frame.addKeyListener(new KeyListener(){
                @Override
                public void keyPressed(KeyEvent e) {
                    int keyCode=e.getKeyCode();
                    if(keyCode==KeyEvent.VK_A){
                     System.out.println("A");
                       switch (state) {
    case 0:
    state = 1;
    break;
    case 1:
    state = 2;
    break;
    case 2:
    state = 3;
    case 3:
    state = 0;
    try {
    Robot robot = new Robot();
    robot.keyPress(KeyEvent.VK_Q);
    robot.keyPress(KeyEvent.VK_W);
    robot.keyPress(KeyEvent.VK_E);
    } catch (AWTException e1) {
    e1.printStackTrace();
    }
    break;
    default:
    state = 0;
    break;
    }
                    }else if(keyCode==KeyEvent.VK_Q){
                     System.out.print("Q ");
                    }
                    else if(keyCode==KeyEvent.VK_W){
                     System.out.print("W ");
                    }
                    else if(keyCode==KeyEvent.VK_E){
                     System.out.print("E ");
                    }
                }
    已试 可行:
    A
    A
    A
    Q W E