关于设置swing快捷键的问题,一般我们设置快捷键都是XXXBtn.setMnemonic(KeyEvent.VK_G);
之类,把XXXBtn的快捷键设为ALT+G,但我想把这个按钮的快捷键设为Esc时,用XXXBtn.setMnemonic(KeyEvent.VK_ESCAPE);时,直接按ESC好像没效果,如果按下ALT+ESC又会把程序切换成其它程序,请问如何把一个按钮的快捷键设为ESC
PS:另一个方法用KeyListener来判断我知道该怎么用,现在我想知道,如果不用KeyListener,还有其它办法吗?谢谢
之类,把XXXBtn的快捷键设为ALT+G,但我想把这个按钮的快捷键设为Esc时,用XXXBtn.setMnemonic(KeyEvent.VK_ESCAPE);时,直接按ESC好像没效果,如果按下ALT+ESC又会把程序切换成其它程序,请问如何把一个按钮的快捷键设为ESC
PS:另一个方法用KeyListener来判断我知道该怎么用,现在我想知道,如果不用KeyListener,还有其它办法吗?谢谢
需要注意的一点是,你必须要保证该component获得焦点。另外,可以使用new KeyAdapter()代替new KeyListener(),这样,你可以只实现你所需要的方法即可。component.addKeyListener(
new KeyListener(){
public void keyPressed(KeyEvent e) {
System.out.println("keyPressed");
}
public void keyTyped(KeyEvent e) {
System.out.println("keyTyped");
}
public void keyReleased(KeyEvent e) {
System.out.println("keyReleased");
if (e.getKeyCode() == KeyEvent.VK_ESCAPE ) {
}
}
});
1,关于用setMnemonic这个方法,我写了个小程序打印出键盘各个键的值,发现Esc键的keycode是27,我查了javaDoc,那个 VK_ESCAPE 的值也是27,按道理应该可以使ESC键生效,可能你说得对,“mnemonic必须是可见的字符,ESC不是,所以不能用setMnemonic设置。”那原来里面提供的KeyEvent.VK_ESCAPE 这个是对应键盘上的那个键呢?
2,关于KeyListener,我知道这样可以实现我的功能,但现在问题是,我这个swing等程序是基于一套公司内部框架写的,本身其实是一个JPanel,但通过xml配置后,框架在运行时会自动把他转成一个Dialog,用KeyListener来实现这个ESC快捷键会有问题,因为这个Dialog在编译时是不存在的,所以如this.getParentDialog().addKeyListener(.....)会报错 抛出空引用异常 (那个getParentDialog()是框架提供的一个方法)。所以这里不能用KeyEventListener或KeyEventAdapter.
所以现在不知道要用什么方法才能把Esc设为快捷键。。
请大家帮帮忙,谢谢。。
registerKeyboardAction((ActionListener anAction,
String aCommand,
KeyStroke aKeyStroke,
int aCondition))
这个方法,如cancelBtn.registerKeyboardAction(cancelBtn.getActionListeners()[0],KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE,0),JButton.WHEN_IN_FOCUSED_WINDOW);可以实现我想要的功能,
但我查了J2SE5.0的DOC,好像这个方法在1.4还行,在1.5此方法现在已过时,对于类似的操作,请结合使用 getActionMap() 和 getInputMap()。具体详情可以查查DOC。。
最后多谢Unagain()的热心帮助,现结贴给分.....