Java JFilechooser - PullRequest
       10

Java JFilechooser

4 голосов
/ 28 июля 2011

Я хотел бы иметь возможность контролировать внешний вид JFileChooser. В частности, я хотел бы сохранить способ отображения JFileChooser при последнем отображении. Я хотел бы сохранить, было ли оно использовано в подробностях / представлении списка и в каком столбце (например, размер или дата изменения) списки были отсортированы.

Я знаю, что есть много вопросов о JFileChooser, но я не смог найти то, что ищу.

Спасибо

РЕДАКТИРОВАТЬ: это было предложено в качестве ответа, но хранить ссылку на средство выбора файлов недостаточно, поскольку я хочу сохранить настройки во многих случаях, когда я запускаю приложение

РЕДАКТИРОВАТЬ: например, я обычно хочу открыть самый последний файл, который я скачал, поэтому я хочу отсортировать по дате изменения и отобразить в подробном представлении

Ответы [ 3 ]

2 голосов
/ 28 июля 2011

Как насчет сериализации объектов?Вы можете сохранить объект JFileChooser в файл, а затем извлечь его.

2 голосов
/ 28 июля 2011

Сохраните ссылку на него и создайте его только один раз. В последующем он должен открываться примерно так же, как и при его удалении. Вам нужно будет предпринять дополнительные шаги для восстановления местоположения средства выбора файлов.


Сохраняется между запусками.

Существует несколько способов хранения данных между прогонами (например, файл свойств, XML, Preferences и т. Д.). Это быстрый и грязный способ добиться этого.

import java.awt.event.*;
import javax.swing.*;
import java.io.*;

class SerializeMyChooser {

    static private JFileChooser fileChooser;
    static File serializedChooser = new File("chooser.ser");

    public static void main(String[] args) {
        SwingUtilities.invokeLater( new Runnable() {
            public void run() {
                final JButton showChooser = new JButton("Open File");
                showChooser.addActionListener( new ActionListener() {
                    public void actionPerformed(ActionEvent ae) {
                        if (fileChooser==null) {
                            if (serializedChooser.exists()) {
                                // use the resialized form
                                try {
                                    ObjectInputStream ois = new ObjectInputStream(
                                        new FileInputStream(serializedChooser));
                                    fileChooser = (JFileChooser)ois.readObject();
                                    ois.close();
                                } catch(Exception e) {
                                    // something SNAFU - use fall-back
                                    fileChooser = new JFileChooser();
                                    // configure file chooser..
                                }
                            } else {
                                fileChooser = new JFileChooser();
                                // configure file chooser..
                            }
                        }
                        fileChooser.showOpenDialog(showChooser);
                    }
                });

                JOptionPane.showMessageDialog(null, showChooser);

                if (fileChooser!=null) {
                    try {
                        ObjectOutputStream oos = new ObjectOutputStream(
                            new FileOutputStream(serializedChooser));
                        oos.writeObject(fileChooser);
                        oos.flush();
                        oos.close();
                    } catch(Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        });
    }
}

Правильная обработка ввода-вывода и исключений оставлена ​​пользователю в качестве упражнения.

1 голос
/ 29 июля 2011

К сожалению, то, что вы хотите сделать, не тривиально.Так и должно быть, но так не реализовано.Отображение каталога и сортировка является частью LAF.Единственный способ получить желаемое поведение - реализовать собственный BasicFileChooserUI , переопределить create / getModel и обеспечить реализацию BasicDirectoryModel .В методе сортировки BasicDirectoryModel фактически выполняется сортировка.

Я слышал похвалу XFileDialog , но сам не пробовал.Это то, что нужно исследовать, помня, что это только для Windows (возвращается к JFileChooser в OSX или Linux).

...