我有一个带有某些 JComponents(例如 JPanels)的应用程序,它们能够在 InputMap/ActionMap 的帮助下处理 KeyEvent.VK_ENTER。
这很好用,有一个例外:如果我有一个 JFileChooser 来选择一个文件,并且我用 from 键盘完成了这个选择,这个键事件将传递给我的应用程序的下一个活动 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
但它永远不会达到“做某事......”?!?