JFileChooser.showSaveDialog: All files greyed out

2020-04-07 02:59发布

I'm trying to use the JFileChooser to get files for loading and saving. The dialog that comes up with openFileDialog() works fine, but when I use the saveFileDialog() method, the dialog window has all the file names greyed out. This happens with or without a FileFilter (my example includes one to better show what I'm seeing).

Here's a minimal program to illustrate:

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

Here's what I see in the Open dialog: Open Dialog

Here's what I see in the Save dialog: Save Dialog

Despite being greyed out, all the files in the save dialog are selectable.

I'm on Mac/Mountain Lion and Java 7 if it matters.

Is this expected behavior? Is there a way to change this?

(Edit: per comments by MadProgrammer + trashgod below, this appears to be consistent with the look + feel of other (native) Mac apps)

3条回答
Ridiculous、
2楼-- · 2020-04-07 03:13

What I ended up doing was to use:

JFileChooser chooser = new JFileChooser(...);
chooser.showDialog(myFrame, "Save");

My save dialog looks like a save dialog, and the FileFilter greys out only files that fail its test.

查看更多
家丑人穷心不美
3楼-- · 2020-04-07 03:26

Mmm... I think, that show dialogs the way you do is not the best way

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

I think that could be generating a conflict. Why don't you try to use a JFrame to help you? Try with this piece of code, just to know if the problem is the saveDialog. Myabe then you can adapt it to your programming requirements.

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());
}

As a matter of fact, you could try using the setLookAndFeel, I remember I had this issue working with my Macbook Pro.

查看更多
ら.Afraid
4楼-- · 2020-04-07 03:36

I'm looking for the .txt files to be displayed in the "normal" color while in the save dialog.

That's controlled by the FileChooserUI delegate specific to a particular Look & Feel, e.g. AquaFileChooserUI on Mac OS X. You can use a different L&F, (laboriously) write your own FileChooserUI, or develop a custom File Browser GUI.

查看更多
登录 后发表回答