自java 7以来,JFileChooser对按Enter不起作用

时间:2013-03-12 14:55:47

标签: java swing java-7 look-and-feel jfilechooser

我在嵌入JFrame 中的 JFileChooser时遇到问题。如果我在文本字段中键入文件名或正则表达式并按“回车”键,则没有任何反应。

如果我使用“打开”按钮而不是输入它。 从java 7开始出现此问题,并且只有在我使用嵌入的JFileChooser时才会出现此问题。 在 JFileChooser OpenDialog 中,“输入”键有效。

如果我使用Nimbus的外观和感觉,它也可以嵌入,使用其他外观并感觉它不起作用。

我可以在Windows和Linux系统的外观和感觉以及CrossPlatformLookAndFeel(我认为它称为Metal)上重现此错误。

有没有人解决这个问题?

2 个答案:

答案 0 :(得分:3)

如果您只想按返回键选择给定的路径和文件,您可以在实例化JFileChooser后在JDialog中添加以下行:

KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
InputMap map = chooser.getInputMap(JFileChooser.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
map.put(enter, "approveSelection");

其中chooser是JFileChooser的实例

答案 1 :(得分:2)

向甲骨文提交错误报告后,但由于这真的很烦人,我一直试图解决这个问题几个小时(在几天的过程中)。最后浏览OpenJDK和Oracle源代码,了解我使用JFileChooser组件与其内置showOpenDialog等方法之间的差异。

我相信我有一个可靠的解决方法,似乎适用于我们的应用程序。只是一点背景:我们在JPanel(带有GridBagLayout)和“System”外观中使用 JDialog 的自定义子类中的 JFileChooser 组件。

以下是执行此操作的单行代码:

dialog.getRootPane().setDefaultButton(chooser.getUI().getDefaultButton(chooser));

其中

  • 对话框是包含JFileChooser组件的 JDialog 的实例
  • 选择器 JFileChooser
  • 的一个实例

上面的示例代码用于演示问题的代码(在显示模式对话框之前),但我们稍后将代码移动到对话框子类的构造函数中以使事情变得更容易。从JRE 1.7.0_45开始,我们仍然面临着这个问题,所以如果有其他人在努力解决这个问题,这将有所帮助。