簡體   English   中英

Java JFilechooser

[英]Java JFilechooser

我希望能夠控制JFileChooser的外觀。 特別是我想保存JFileChooser在上次顯示時的顯示方式。 我想保存它是否在詳細信息/列表視圖中使用以及列表被排序的列(例如,大小或修改日期)。

我知道有很多關於JFileChooser的問題但是我找不到我想要的東西。

謝謝

編輯:它被建議作為一個答案,但保持filechooser的引用是不夠的,因為我想持續多次設置我運行應用程序

編輯:例如我通常想打開我下載的最新文件,所以我想按修改日期排序並在詳細視圖中顯示

保持對它的引用,只構造一次。 它應該在隨后的場合打開,看起來非常像用戶處理它時所做的那樣。 您需要采取額外的步驟來恢復文件選擇器的位置


在兩次運行之間堅持。

在運行之間存在多種存儲數據的方式(例如,屬性文件,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();
                    }
                }
            }
        });
    }
}

正確的I / O和異常處理留給用戶練習。

對象序列化怎么樣? 您可以將JFileChooser對象保留到文件中,然后再檢索它。

不幸的是,你想做的事情並非無足輕重。 它應該是,但它沒有這樣實現。 目錄和排序的顯示是LAF的一部分。 獲得所需行為的唯一方法是實現自己的BasicFileChooserUI ,重寫create / getModel並提供BasicDirectoryModel的實現。 BasicDirectoryModel的排序方法是實際執行排序的地方。

我聽說過對XFileDialog的贊美,但我自己沒試過。 這是要調查的東西,記住它只是Windows(在OSX或Linux上回退到JFileChooser)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM