Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.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 在Bizzare JFileChooser情况下,右键单击菜单文本为空_Java_Swing_User Interface_Jfilechooser - Fatal编程技术网

Java 在Bizzare JFileChooser情况下,右键单击菜单文本为空

Java 在Bizzare JFileChooser情况下,右键单击菜单文本为空,java,swing,user-interface,jfilechooser,Java,Swing,User Interface,Jfilechooser,我在Redhat 6上使用了一个简单的JFileChooser,代码如下: JFileChooser testFileChooser = new JFileChooser("Test"); testFileChooser.showOpenDialog(this); JFileChooser按预期工作。在文件选择区域中,如果我右键单击,将得到一个包含三行的对话框,其中一行带有箭头。没有描述行的功能的文本。第一行在列表视图和详图视图之间切换。第二行似乎什么也不做,第三行创建一个新文件夹。当我搜索这

我在Redhat 6上使用了一个简单的JFileChooser,代码如下:

JFileChooser testFileChooser = new JFileChooser("Test");
testFileChooser.showOpenDialog(this);

JFileChooser按预期工作。在文件选择区域中,如果我右键单击,将得到一个包含三行的对话框,其中一行带有箭头。没有描述行的功能的文本。第一行在列表视图和详图视图之间切换。第二行似乎什么也不做,第三行创建一个新文件夹。当我搜索这个问题时,似乎无法访问或检查JFileChooser的右键单击弹出对话框。我不明白它怎么会一开始就这样破裂。请告诉我如何解决这个问题。

我找到了一个解决方法

JFileChooser在内部使用文件窗格,该窗格使用JFileChooser的getComponentPopupMenu作为上下文菜单。但是,因为它返回null,所以它创建自己的

标签上的文本通过UIManager.getString调用从UIManager获取。出于某种原因,UIManager正在返回空字符串

因此,我们只需手动设置UIManager中的字符串

如果您在创建文件选择器之前进行了这些调用,则可以修复它

UIManager.put("FileChooser.detailsViewActionLabelText", "Details");
UIManager.put("FileChooser.listViewActionLabelText", "List");
UIManager.put("FileChooser.viewMenuLabelText", "View");
UIManager.put("FileChooser.refreshActionLabelText", "Refresh"));
UIManager.put("FileChooser.newFolderActionLabelText", "New Folder");

我意识到这已经晚了4年,但我希望这能有所帮助。

FYI这些菜单项的文本应该是“查看”、“刷新”和“新建文件夹”。我不知道为什么它可能不会出现。可能是某个语言文件丢失或错误?如何验证我的语言文件没有丢失?我不知道。或许可以尝试卸载并重新安装Java?请确保您正在EDT上下文中运行代码。您使用的是什么版本的Java?我很有信心,当我右键单击时,我已处于EDT状态。我不知道如何在调试器中设置断点来证明它。当我右键点击时,有什么方法可以证明我在EDT上吗?