2013-02-22 3 views
4

Я пытаюсь использовать JFileChooser для получения файлов для загрузки и сохранения. Диалог, который появляется с openFileDialog(), отлично работает, но когда я использую метод saveFileDialog(), диалоговое окно имеет все имена файлов, выделенные серым цветом. Это происходит с FileFilter (мой пример включает в себя один, чтобы лучше показать, что я вижу).JFileChooser.showSaveDialog: все файлы greyed out

Вот минимальная программа для иллюстрации:

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

Вот что я вижу в открытом диалоге: Open Dialog

Вот что я вижу в диалоговом окне Save: Save Dialog

Несмотря на то что вы неактивны, все файлы в диалоговом окне сохранения можно выбрать.

Я нахожусь на Mac/Mountain Lion и Java 7, если это имеет значение.

Ожидается ли такое поведение? Есть ли способ изменить это?

(Edit: за комментариями MadProgrammer + trashgod ниже, это, кажется, согласуется с выражением + чувства других (родных) Mac приложений)

+3

Короткий ответ, да, это ожидаемое поведение. В отличие от Windows, которая просто исключает файлы из видимого списка, по какой-то странной причине Mac OS Look & Feel решает, что файлы должны быть серыми (если их не выбрать) – MadProgrammer

+0

Но в соответствии с фильтром.txt-файлы должны быть как видимыми, так и выбираемыми (см., как они выглядят в диалоговом окне «Открыть»: в черном (в отличие от серого) шрифте – YosemiteMark

+0

@MadProgrammer правильно. Вы выбираете серое имя, которое затем становится новым кандидатом ' Сохранить как 'имя. – trashgod

ответ

2

Я ищу файлы .txt, которые будут отображаться в «нормальном» цвете в диалоговом окне сохранения.

Вот контролируется FileChooserUI делегата для конкретной Look & Feel, например, AquaFileChooserUI на Mac OS X. Вы можете использовать другой L & F, (с трудом) напишите свой собственный FileChooserUI или создайте пользовательский File Browser GUI.

+1

Ох, хорошая ссылка. ;) OTOH Я подозреваю, что типичный пользователь OS X предпочел бы поиск по умолчанию («путь наименьшего сюрприза» и т. Д.). Приятно иметь альтернативы. :) –

0

Ммм ... Я думаю, что шоу диалоги так, как вы do не лучший способ

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

Я думаю, что это может вызвать конфликт. Почему вы не пытаетесь использовать JFrame, чтобы помочь вам? Попробуйте этот кусок кода, просто чтобы узнать, является ли проблема saveDialog. Myabe, тогда вы можете адаптировать его к вашим требованиям к программированию.

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.

+0

Использование родительского фрейма дает мне то же поведение – YosemiteMark

0

То, что я в конечном итоге делает было использовать:

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

Мой диалог сохранения выглядит как диалог сохранения, а FileFilter затемняется только файлы, которые не свой тест.

Смежные вопросы