JFileChooser.showSaveDialog:所有文件都变灰

6
我正在尝试使用JFileChooser来获取加载和保存文件。通过openFileDialog()打开的对话框可以正常工作,但是当我使用saveFileDialog()方法时,对话框窗口中的所有文件名都变成了灰色。这种情况发生在是否有FileFilter的情况下(我的示例包括一个FileFilter以更好地展示我所看到的内容)。
下面是一个最简程序来说明:
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.filechooser.FileNameExtensionFilter;

public class Temp extends JFrame {
    public static void main(String[] args){
    JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JFileChooser chooser = new JFileChooser();
        FileNameExtensionFilter filter = new FileNameExtensionFilter("Text File", "txt");
        chooser.setFileFilter(filter);

        frame.setVisible(true);
        chooser.showOpenDialog(null);
        chooser.showSaveDialog(null);
    }
}

这是我在打开对话框中看到的: 打开对话框 这是我在保存对话框中看到的: 保存对话框 尽管被灰色覆盖,但保存对话框中的所有文件都是可选择的。
如果重要的话,我正在使用Mac/Mountain Lion和Java 7。
这是否是预期的行为?是否有改变这种情况的方法?
(编辑:根据下面的MadProgrammer + trashgod的评论,这似乎与其他(本地)Mac应用程序的外观和感觉一致)

3
简短回答,是的,这是预期行为。与Windows不同,后者只会从可见列表中排除这些文件,但出于某种奇怪的原因,Mac OS Look&Feel决定将这些文件变灰(当您无法选中它们时)。 - MadProgrammer
但根据筛选器,.txt文件应该是可见和可选择的(请参阅打开对话框中它们的外观:使用黑色字体(而不是灰色))。 - YosemiteMark
@MadProgrammer 是正确的。您可以选择一个灰色的名称,然后它就会成为新的“另存为”名称候选者。 - trashgod
@trashgod 对的 - 所有文件都是可选择的。我要找的是在保存对话框中,.txt 文件以“正常”的颜色显示,就像在打开对话框中看起来一样。 - YosemiteMark
默认行为对于Mac用户来说并不意外,但是我在下面提出了一些替代方案。 - trashgod
@trashgod (+ @MadProgrammer) - 是的,看其他本地应用程序似乎确实是这种情况,尽管我以前从未注意过。我想对我的眼睛来说,在JFileChooser中看起来特别糟糕。如果它继续困扰我,我会尝试调整外观和感觉 :) - YosemiteMark
3个回答

2
我最终采用的方法是使用:
JFileChooser chooser = new JFileChooser(...);
chooser.showDialog(myFrame, "Save");

我的保存对话框看起来像一个保存对话框,而FileFilter仅使未通过测试的文件变灰。


2
我希望在保存对话框中,.txt 文件以“正常”颜色显示。

这取决于特定于特定 Look & Feel 的 FileChooserUI 代理,例如在 Mac OS X 上的 AquaFileChooserUI。您可以使用不同的 L&F,(费力地)编写自己的 FileChooserUI,或者开发自定义的文件浏览器 GUI


1
哦,不错的链接。 ;) 另一方面,我怀疑典型的OS X用户会更喜欢默认外观(“最少惊讶原则”等)。有备选方案也很好。 :) - Andrew Thompson

0

嗯...我认为,以你现在的方式显示对话框并不是最好的方式

chooser.showOpenDialog(null);
        chooser.showSaveDialog(null);

我认为这可能会产生冲突。为什么不尝试使用JFrame来帮助你呢?试试这段代码,只是为了知道问题是否出在saveDialog上。也许然后你可以根据自己的编程要求进行调整。

JFrame parentFrame = new JFrame();

JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Specify a file to save");    

int userSelection = fileChooser.showSaveDialog(parentFrame);

if (userSelection == JFileChooser.APPROVE_OPTION) {
    File fileToSave = fileChooser.getSelectedFile();
    System.out.println("Save as file: " + fileToSave.getAbsolutePath());
}

事实上,你可以尝试使用setLookAndFeel,我记得我在我的Macbook Pro上遇到过这个问题。


使用父框架会给我相同的行为。 - YosemiteMark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接