3

我有一个带有某些 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

但它永远不会达到“做某事......”?!?

4

0 回答 0