借用了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
下面是一个对键盘进行监听的类、
而你所说的我按三下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();
}
}
问题太泛了,没有应用场景,无法给出建议。比如说:
如果只是为了显示在Console上,直接写三句println就完毕了。
如果是要拦截另一个程序得到的按键输入,并篡改为QWE,想用Java难度就很高了。
或者用state。设state 0 1 2 3。初试为0,如果按A,进入state1,在按A 入2,然后3。在state3里执行QWE,java awt robot可以模拟keypress。 同样有个timer,比如一秒中没有接到任何按键,state归0。
@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