首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java JFilechooser

Java JFilechooser
EN

Stack Overflow用户
提问于 2011-07-28 12:49:45
回答 3查看 2.5K关注 0票数 4

我希望能够控制JFileChooser的外观。特别是,我想保存JFileChooser上次显示时的显示方式。我想保存它是否在细节/列表视图中使用,以及哪些列(例如,大小或日期修改)列表被排序。

我知道有很多关于JFileChooser的问题,但是我一直找不到我想要的东西。

谢谢

编辑:它被建议作为一个答案,但是保持对文件回波器的引用是不够的,因为我想在运行应用程序的过程中多次保存这些设置。

编辑:例如,我通常希望打开我下载的最新文件,所以我想按日期排序,修改后显示详细视图。

EN

回答 3

Stack Overflow用户

发布于 2011-07-28 12:57:42

保持对它的引用,并且只构造一次。它应该在随后的情况下打开,看起来很像用户处理它时的样子。您需要采取额外的步骤来恢复文件选择器的位置

在两次跑步之间坚持。

在运行之间有多种存储数据的方法(例如,属性文件、XML、Preferences等)。这是实现这一目标的快速“不”的方法。

代码语言:javascript
复制
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();
                    }
                }
            }
        });
    }
}

正确的I/O &异常处理是留给用户的练习。

票数 2
EN

Stack Overflow用户

发布于 2011-07-28 13:08:12

对象序列化如何?您可以将JFileChooser对象持久化到文件中,然后再检索它。

票数 2
EN

Stack Overflow用户

发布于 2011-07-29 03:18:18

不幸的是,你想要做的事情并不是微不足道的。应该是这样的,但它不是那样实现的。目录和排序的显示是LAF的一部分。获得所需行为的唯一方法是实现自己的BasicFileChooserUI、覆盖create/getModel和提供BasicDirectoryModel的实现。BasicDirectoryModel的排序方法是实际执行排序的地方。

我听说过对XFileDialog的赞扬,但我自己还没试过。这是值得研究的事情,请记住,它是Windows专用的(回到OSX或Linux上的JFileChooser )。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6859225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档