jfilechooserで現在のディレクトリの親フォルダを表示したい。親フォルダを参照する
フォルダを表示したい..
質問する
1319 次
2 に答える
3
このようにファイルパスを引数とするコンストラクタを使用します。
JFileChooser jfc = new JFileChooser(".\\..");
チェックアウトしてくださいJFileChooser(File currentDirectory)
。
于 2013-02-27T05:53:42.000 に答える
2
これは、要求された機能を実装するための「試み」です。問題は、システムが行っていることを完全に再現できないことです。
基本的に、ディレクトリ コンボ ボックスは何らかのネイティブFile
オブジェクト (Windows の場合はsun.awt.shell.Win32ShellFolder2
) を想定しています。しかし、提供された API 内からそれらを作成する方法はないようです (ルック アンド フィールとクロス プラットフォーム機能が損なわれるため、手動で作成する必要はありません)。
import core.util.MethodInvoker;
import java.awt.EventQueue;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.swing.JFileChooser;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.filechooser.FileSystemView;
import javax.swing.plaf.ComponentUI;
public class TestFileChooser {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
System.out.println(UIManager.getSystemLookAndFeelClassName());
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFileChooser fc = new JFileChooser(new MyFileSystemView());
fc.showOpenDialog(null);
}
});
}
public static class MyFileSystemView extends FileSystemView {
@Override
public File[] getFiles(File dir, boolean useFileHiding) {
File[] files = super.getFiles(dir, useFileHiding);
List<File> fileList = new ArrayList<>(Arrays.asList(files));
if (!isFileSystemRoot(dir)) {
File newPath = FileSystemView.getFileSystemView().createFileObject(dir, "/..");
fileList.add(0, newPath);
}
files = fileList.toArray(files);
return files;
}
@Override
public File createNewFolder(File containingDir) throws IOException {
File newFolder = new File(containingDir + File.separator + "New Folder");
if (!newFolder.mkdir()) {
newFolder = null;
}
return newFolder;
}
}
}
于 2013-02-27T10:34:45.137 に答える