【发布时间】:2013-07-11 10:36:00
【问题描述】:
我正在尝试向我的 JPanel 添加一个 keylistener,但即使在此之后它也无法工作:
put.setFocusable(true);
put.requestFocusInWindow();
KeyboardHandler keyhandler=new KeyboardHandler();
put.addKeyListener(keyhandler);
}
private class KeyboardHandler implements KeyListener{
public void keyPressed(KeyEvent e) {
System.out.println("OVDE ZZZ");
if(e.getKeyCode()==17) ctrl=true;
if(e.getKeyCode()==90) z=true;
if(ctrl && z){
if (UndoBrojac==0) JOptionPane.showMessageDialog(null, "You can't undo that");
else{
UndoBrojac--;
put.setUndo(UndoBrojac);
}
}
}
public void keyReleased(KeyEvent e){
if (e.getKeyCode()==17) ctrl = false;
if (e.getKeyCode()==90) z = false;
}
public void keyTyped(KeyEvent e) {}
}
我正在尝试添加 ctrl+z 但它不起作用。
【问题讨论】:
-
你应该使用
KeyEvent.VK_CONTROL和KeyEvent.VK_Z来避免魔法常量。 -
这不是问题,它甚至不会得到按键
-
对于 Swing,通常在基于 AWT 的较低级别
KeyListener上使用键绑定。有关如何使用它们的详细信息,请参阅How to Use Key Bindings。 -
为什么会起作用?它需要组件具有焦点,我猜用你的话说,顶级容器正在获得焦点,所以按照已经建议使用 KeyBinding :-) @camickr 的这篇关于Motion using Keyboard 的帖子一定会让你感兴趣:-)
-
嗯,这可能是因为您没有遵循答案 ;-) 我选择的副本(在投票结束时)提到了焦点问题并且您应该不 使用 keyListener - 那你为什么不从中学习,相应地更新你的方法然后回来?
标签: java swing jpanel keylistener