Как открывать файлы в Java Swing без JFileChooser

Я использую Java Swing (GUI) и хочу добавить в свой проект кнопку для открытия файлов.

Мне не нравится JFileChooser, так как он открывает маленькое окно для просмотра файлов каталогов. Могу ли я использовать что-то другое вместо JFileChooser под Java Swing?

Я пытался использовать элементы SWT, но это не сработало, то есть использовать объект кнопки, а затем использовать его внутри JFrame, но это не удалось, поэтому я предполагаю, что SWT и Swing не смешиваются вместе?

Вот пример Java Swing с JFileChooser, и я Я ищу что-нибудь подобное этому, чтобы поместить в свой JFrame.

Диалоговое окно файла Windows


person JAN    schedule 05.06.2012    source источник


Ответы (2)


JFileChooser с родным PLAF, похоже, соответствует заявленному требованию.

Собственный выбор файлов PLAF

import javax.swing.JFileChooser;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class NativeFileChooser {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(
                            UIManager.getSystemLookAndFeelClassName());
                } catch(Exception e) {
                    e.printStackTrace();
                }
                JFileChooser jfc = new JFileChooser();
                jfc.showOpenDialog(null);
            }
        });
    }
}

Все еще не совсем по душе? Затем вы можете начать с этого и изменить его на нужное:


.. значит, SWT и Swing несовместимы?

Обычно не рекомендуется смешивать компоненты Swing/AWT/SWT в одном контейнере верхнего уровня. Открыть AWT FileDialog поверх JFrame на основе Swing не проблема, поскольку оба они являются контейнерами верхнего уровня. Я почти уверен, что то же самое относится к Swing/SWT или AWT/SWT.

person Andrew Thompson    schedule 05.06.2012
comment
Как я могу использовать этот код без main ? Я пытался удалить это, но без него код не скомпилируется. Спасибо !! - person JAN; 05.06.2012
comment
Как я могу использовать этот код без основного? Если у вас нет сложной IDE, которая вставляет для вас стандартный (невидимый) метод main, необходимо либо иметь хотя бы один main, либо разработать апплет, чтобы получить графический интерфейс Swing на экране. Я не рекомендую апплет, поэтому придерживайтесь понимания того, как заставить код работать из main. - person Andrew Thompson; 05.06.2012
comment
Мне нужно выбрать файл, а затем разобрать его, короче говоря, процесс выбора файла — это только начало программы, поэтому main усложняет его. Должен ли я опубликовать весь код в другом вопросе? спасибо еще раз. - person JAN; 05.06.2012
comment
..опубликуйте весь код в другом вопросе.. 1) Да, еще один вопрос, но 2) Чтобы быстрее получить помощь, опубликуйте ссылку SSCCE (а не «весь код»). - person Andrew Thompson; 05.06.2012
comment
К вашему сведению: это работает в Windows, но не в OS X. В OS X FileDialog показывает стандартное окно «Открыть файл» (включая боковую панель), а JFileChooser не имеет боковой панели. И я боюсь, что под Linux вы получите GTK JFileChooser, который, откровенно говоря, непригоден для использования и не имеет ничего общего с приличным средством выбора файлов. - person Robin; 05.06.2012
comment
@Robin Это работает в Windows, но не в OS X. Определите «работает». Я бы не стал навязывать пользователям OS X средство выбора файлов в стиле Windows. Мой опыт работы с селектором GTK начался некоторое время назад, и я немного туманен, может быть, лучше предложить пользователю любой PLAF, который он хочет. Они могут предпочесть средство выбора файлов в стиле Nimbus. Жаль, что AWT FileDialog не мощнее/настраиваемее. - person Andrew Thompson; 05.06.2012
comment
Я имею в виду, что собственный внешний вид (=Aqua) JFileChooser в OS X отличается от стандартного диалогового окна «Открыть файл», которое вы получаете в стандартных приложениях OS X. С другой стороны, FileDialog выглядит так же. - person Robin; 05.06.2012

Если вам не нужна гибкость JFileChooser, вы можете выбрать FileDialog, который использует собственный диалог файлов ОС. См. также тему Code ranch и этот ответ на SO

person Robin    schedule 05.06.2012
comment
@ron Да, можешь. Иначе бы не предложил - person Robin; 05.06.2012
comment
По сути, SWT и Swing смешиваются вместе? - person JAN; 05.06.2012
comment
@ron Нет, но AWT и Swing возможны - person Robin; 05.06.2012