[英]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.