我有一个应用程序与某些JComponents(例如JPanels)能够在InputMap / ActionMap的帮助下处理KeyEvent.VK_ENTER。
这很好用,但有一个例外:如果我有一个JFileChooser来选择一个文件并且我用from键盘完成了这个选择,那么这个key-event将被传递给我的应用程序的下一个活动JPanel。文件选择效果很好,但是按下/释放/键入的输入事件被转发,因为在此面板上执行与该面板上的KeyEvent.VK_ENTER相关的操作!如果我通过鼠标完成JFileChooser,它会按预期工作,并且在下一个活动的JPanel上没有任何操作。
如何在JFileChooser上使用这样的KeyEvent?我试图在覆盖JFileChooser的类中建立一个KeyBinding,但这不起作用。我在这里添加了这部分的代码:
public myClass(String theirDir){
fc = new FileChooser(theirDir);
this.bindKeyToAction(fc, KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, true);
}// end constructor()
private bindKeyToAction(JComponent theirComp, KeyStroke theirStroke){
InputMap localInput = theirComp.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
localInput.put(theirStroke, theirStroke,.getKeyChar());
theirComp.getActionMap().put(theirStroke.getKeyChar(), this.generateAction(new String("theCommand");
}// end bindKeyToAction
private Action generateAction(String theirID){
final String localID = theirID;
return new AbstractAction(theirID){
public void actionPerformed(ActionEvent theirEve){
do something....
}
};
}// end generateAction()
...
}// end myClass
但它永远不会达到“做某事......”?!?