4

我对嵌入 JFrame 的 JFileChooser 有疑问。如果我在文本字段中输入文件名或正则表达式并按“输入”键,则不会发生任何事情。

如果我使用“打开”按钮而不是输入它可以工作。这个问题从 java 7 开始出现,并且只有当我使用嵌入的 JFileChooser 时才会出现。在JFileChooser OpenDialog中,“enter”键起作用。

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

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

有没有人解决这个问题?

4

2 回答 2

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");

其中选择器是 JFileChooser 的一个实例

于 2014-08-21T13:18:27.100 回答
2

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

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

这是完成此操作的单行代码:

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

在哪里

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

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

于 2013-11-15T13:27:56.200 回答