当前位置:编程学习 > JAVA >>

想编写一个程序。。。。。。求助。。。

我想编一个按键方面的程序。。。
比如:我按三下A健,等于我按了Q、W、E各一次。。。
这种要怎么实现。。。
我现在无从下手,告诉我应该用哪些知识也行。。。
--------------------编程问答-------------------- 首先肯定是要对键盘进行监听吧?
下面是一个对键盘进行监听的类、
而你所说的我按三下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();
    }
}
--------------------编程问答-------------------- --------------------编程问答-------------------- 楼上的给出答案了~~~~ --------------------编程问答--------------------
引用 1 楼 AA5279AA 的回复:
首先肯定是要对键盘进行监听吧?
下面是一个对键盘进行监听的类、
而你所说的我按三下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();
    }
}
楼主好好看看吧。。。 --------------------编程问答--------------------
引用 楼主 Xiaoxiao123__ 的回复:
我想编一个按键方面的程序。。。
比如:我按三下A健,等于我按了Q、W、E各一次。。。
这种要怎么实现。。。
我现在无从下手,告诉我应该用哪些知识也行。。。


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

--------------------编程问答-------------------- 楼主是想写一个LOL的按键外挂么?用纯Java不能实现这种系统级的程序,用C调用windows api写吧 --------------------编程问答-------------------- 楼主要想法好呀,赞,有时间我用C看好实现不 --------------------编程问答--------------------
引用 6 楼 lcf 的回复:
楼主是想写一个LOL的按键外挂么?用纯Java不能实现这种系统级的程序,用C调用windows api写吧



好像有个东西叫按键精灵 --------------------编程问答-------------------- 想法不错,用什么语言啊想

--------------------编程问答-------------------- 擦  你是想些外挂吗~~~ --------------------编程问答--------------------
引用 1 楼 AA5279AA 的回复:
首先肯定是要对键盘进行监听吧?
下面是一个对键盘进行监听的类、
而你所说的我按三下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();
    }
}
 
就是这个 --------------------编程问答-------------------- KeyAdapter   KeyListener  这两个接口 --------------------编程问答-------------------- 可以使用java中的robot类和键盘监听类一起实现 --------------------编程问答-------------------- 需要一个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。 --------------------编程问答-------------------- 借用了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  --------------------编程问答-------------------- 楼上可行
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,