Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自java 7以来,JFileChooser在按enter键时不会做出反应_Java_Swing_Java 7_Look And Feel_Jfilechooser - Fatal编程技术网

自java 7以来,JFileChooser在按enter键时不会做出反应

自java 7以来,JFileChooser在按enter键时不会做出反应,java,swing,java-7,look-and-feel,jfilechooser,Java,Swing,Java 7,Look And Feel,Jfilechooser,我对嵌入JFrame的JFileChooser有问题。如果我在文本字段中键入文件名或正则表达式,然后按“回车”键,则不会发生任何事情 如果我使用“打开”按钮而不是“输入”,它会工作。 这个问题是从Java7开始出现的,并且只有在我使用JFileChooser嵌入式时才会出现。 在JFileChooser OpenDialog中,“回车”键起作用 如果我使用Nimbus外观,它也可以嵌入,而使用其他外观,它将不起作用 我可以在Windows和Linux系统的look-and-feel以及跨平台的l

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

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

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

我可以在Windows和Linux系统的look-and-feel以及跨平台的look-and-feel(我认为它被称为Metal)上重现这个错误


有人能解决这个问题吗?

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

我相信我有一个可靠的解决方案,似乎适合我们的应用程序。简单介绍一下背景:我们在JPanel(带GridBagLayout)中的自定义子类JDialog中使用JFileChooser组件和“系统”外观

下面是实现这一技巧的一行代码:

dialog.getRootPane().setDefaultButton(chooser.getUI().getDefaultButton(chooser));
在哪里

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

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

如果您只想通过按return键来选择给定的路径和文件,您可以在实例化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的一个实例

您的技巧为我解决了问题。(我使用的是JDK1.8.0(40)