【问题标题】:JFileChooser can't set default selectionJFileChooser 无法设置默认选择
【发布时间】:2015-06-30 20:34:00
【问题描述】:

我想提示用户一个目录来保存一些文件。因此,我按照这个简单的演示应用程序设置了一个 JFileChooser:

import javax.swing.JFileChooser;

public class Demo {
   public static void main(String[] args) {
      new Demo();
   }

   public Demo() {
      JFileChooser chooser = new JFileChooser();
      chooser.setDialogTitle("Chooser test");
      chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
      chooser.setAcceptAllFileFilterUsed(false);
      chooser.showSaveDialog(null);
   }
}

问题是“选择”按钮是灰色的,直到用户以某种方式与文件选择器交互,即使当前显示的目录(在这种情况下是用户的主目录,尽管我的实际用例是更具体)是一个完全有效的目的地。我尝试使用JFileChooser.setSelectedFile() 设置默认选择,但这仍然不会导致启用“选择”按钮。

我预计在大多数情况下,我的用户会希望使用我为他们选择的默认目录,并且他们应该能够点击文件选择器。如何让“选择”按钮真正启用?

这是在 OSX、Java 6/7 上,以防万一。任何建议/建议表示赞赏。感谢您的宝贵时间。

【问题讨论】:

  • 在 Windows 机器上的 Java 7 和 8 上测试它没有问题..完美运行
  • 好的,那么这很可能是 OSX 很痛苦。感谢您的跨平台测试。

标签: java jfilechooser


【解决方案1】:

这在 Mac 中看起来像 JRE problem 尝试将 JRE/JDK 更新到最新并尝试

随便加

  chooser.setCurrentDirectory(new File(System.getProperty("user.dir")));

这会将currentDirectory 位置设置为当前目录

【讨论】:

  • 不幸的是,没有什么不同。
  • 尝试将 JRE 版本更新到已编辑帖子中所述的最新版本
  • 嗯,这看起来确实是相关的。谢谢。在实际部署中,我们仍然需要暂时解决 Java 6 的问题,但希望在未来几个月的某个时候,我们能够升级到 8。
【解决方案2】:

好的,根据 Madhan 的 cmets,这似乎是特定于 OSX 的。考虑到这一点,我找到了一种解决方法:调用JFileChooser.updateUI() 将强制按钮注意到事情发生了变化。这是更新后的脚本:

import java.io.File;

import javax.swing.JFileChooser;

public class Demo {
   public static void main(String[] args) {
      new Demo();
   }

   public Demo() {
      JFileChooser chooser = new JFileChooser();
      chooser.setDialogTitle("Chooser test");
      chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
      chooser.setAcceptAllFileFilterUsed(false);
      File root = chooser.getCurrentDirectory();
      chooser.setCurrentDirectory(new File(root.getParent()));
      chooser.setSelectedFile(root);
      chooser.updateUI();
      chooser.showSaveDialog(null);
   }
}

不幸的是,调用setCurrentDirectorysetSelectedFile 似乎是必要的。至少它有效。感谢您的协助,马丹;我假设我做错了什么,所以知道这是一个操作系统/外观问题,我开始寻找解决方法。

【讨论】:

  • 你在 OSx 中测试过吗?什么是 JRE 版本
  • 我正在 OSX 中进行开发,是的。 JRE 是 1.7.0_67-b01。
  • chooser.updateUI() 是说服按钮启用自身所必需的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多