Hallo,
ich will ein "virtuelles" Dateisystem im JFileChooser darstellen. Dazu wollte ich das zunächst in einem kleinen Programm ausprobieren. Soweit Funktioniert auch alles, jedoch passiert nichts, wenn ich einen Ordner anklicke um den Inhalt anzuzeigen.
Ich habe im Prinzip nur die FileSystemView erweitert und für meine Zwecke angepasst:
Hier noch meine Klasse die File extended.
Und hier noch meine Klasse zum ausprobieren.
Hoffe mir kann jemand helfen.
ich will ein "virtuelles" Dateisystem im JFileChooser darstellen. Dazu wollte ich das zunächst in einem kleinen Programm ausprobieren. Soweit Funktioniert auch alles, jedoch passiert nichts, wenn ich einen Ordner anklicke um den Inhalt anzuzeigen.
Ich habe im Prinzip nur die FileSystemView erweitert und für meine Zwecke angepasst:
Java:
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.Icon;
import javax.swing.filechooser.FileSystemView;
public class MyFileSystemView extends FileSystemView {
private Map files = new HashMap();
private final File projectDirectory;
public MyFileSystemView() {
projectDirectory = new MyFile("Project");
files.put("Project", projectDirectory);
files.put("D", new MyFile("Project/D"));
files.put("test", new MyFile("Project/D/test"));
files.put("getRoots", new File[]{(File) projectDirectory});
files.put("getFiles(Project)", new File[]{(File) files.get("D")});
files.put("getFiles(D)", new File[]{(File) files.get("test")});
System.out.println("Path: " + ((File) files.get("Project")).getPath());
System.out.println("Path: " + ((File) files.get("D")).getPath());
System.out.println("Path: " + ((File) files.get("test")).getPath());
System.out.println("Path: " + ((File) files.get("test")).getParent());
System.out.println(((File) files.get("test")).getParent());
}
@Override
public File createNewFolder(File containingDir) {
return null;
}
@Override
public File createFileObject(File dir, String filename) {
return super.createFileObject(dir, filename);
}
@Override
public File createFileObject(String path) {
return super.createFileObject(path);
}
@Override
protected File createFileSystemRoot(File f) {
return createFileSystemRoot(f);
}
@Override
public File getChild(File parent, String fileName) {
return super.getChild(parent, fileName);
}
@Override
public File getDefaultDirectory() {
return projectDirectory;
}
@Override
public File[] getFiles(File dir, boolean useFileHiding) {
File[] children = (File[]) files.get("getFiles(" + dir.getName() + ")");
if (children == null) {
return new File[0];
} else {
return children;
}
}
@Override
public File getHomeDirectory() {
return projectDirectory;
}
@Override
public File getParentDirectory(File dir) {
return null;
}
@Override
public File[] getRoots() {
return (File[]) files.get("getRoots");
}
@Override
public String getSystemDisplayName(File f) {
return f.getName();
}
@Override
public Icon getSystemIcon(File f) {
return null;
}
@Override
public String getSystemTypeDescription(File f) {
return "Description";
}
@Override
public boolean isFileSystem(File f) {
return true;
}
@Override
public boolean isFileSystemRoot(File dir) {
return false;
}
@Override
public boolean isHiddenFile(File f) {
return false;
}
@Override
public boolean isParent(File folder, File file) {
return false;
}
@Override
public boolean isRoot(File f) {
return projectDirectory == f;
}
@Override
public Boolean isTraversable(File f) {
return Boolean.TRUE;
}
}
Hier noch meine Klasse die File extended.
Java:
public class MyFile extends File {
public MyFile(String s) {
super(s);
}
@Override
public boolean isDirectory() {
return true;
}
}
Und hier noch meine Klasse zum ausprobieren.
Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.util.Arrays;
import javax.swing.*;
/**
*
*
*/
public class JFileChooserTest {
public JFileChooserTest() {
final JFrame frame = new JFrame();
frame.setSize(500, 400);
JButton button = new JButton();
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
MyFileSystemView view = new MyFileSystemView();
JFileChooser chooser = new JFileChooser(view);
chooser.showOpenDialog(frame);
}
});
JPanel panel = new JPanel();
panel.add(button);
frame.add(panel);
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args) {
JFileChooserTest test = new JFileChooserTest();
}
}
Hoffe mir kann jemand helfen.