Hallo,
ich schlage mich seit ein paar Tagen mit der Aufgabe rum einen Dateiexplorer in Swing zu programmieren, habe dabei aber so meine Probleme.
Ich scheitere dabei mir die Ordnerinhalte auf der im rechten Fenster anzeigen zu lassen. Gefordert ist die Ausgabe in einer Tabelle. Im zweiten Schritt soll dann das rechte Fenster noch einmal geteilt werden und in der unteren Hälfte eine Vorschau für txt und html Files möglich sein.
Wäre schön wenn mir jemand weiterhelfen könnte.
Gruß
Mattias
ich schlage mich seit ein paar Tagen mit der Aufgabe rum einen Dateiexplorer in Swing zu programmieren, habe dabei aber so meine Probleme.
Ich scheitere dabei mir die Ordnerinhalte auf der im rechten Fenster anzeigen zu lassen. Gefordert ist die Ausgabe in einer Tabelle. Im zweiten Schritt soll dann das rechte Fenster noch einmal geteilt werden und in der unteren Hälfte eine Vorschau für txt und html Files möglich sein.
Wäre schön wenn mir jemand weiterhelfen könnte.
Gruß
Mattias
Java:
import java.awt.BorderLayout;
import java.awt.Component;
import java.io.File;
import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
public class FileBrowser extends JFrame {
private JFileTree t = new JFileTree();
private JLabel l = new JLabel(" ");
private JLabel f = new JLabel(" ");
public FileBrowser() {
super("FileBrowser");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setAlwaysOnTop(true);
this.setLocationByPlatform(true);
this.setSize(800, 600);
t.getSelectionModel().addTreeSelectionListener(
new TreeSelectionListener() {
private File file;
private File[] files;
private DefaultMutableTreeNode dmt;
private Object[] o;
private String s = "";
public void valueChanged(TreeSelectionEvent e) {
dmt = null;
dmt = (DefaultMutableTreeNode) e
.getNewLeadSelectionPath()
.getLastPathComponent();
o = dmt.getUserObjectPath();
s = "";
for (Object ob : o) {
s = s + ob;
}
file = new File(s);
l.setText(file.getAbsolutePath());
if (file.isDirectory())
if ((files = file.listFiles()).length > 0) {
dmt.removeAllChildren();
for (int ast = 0; ast < files.length; ast++) {
if (files[ast].isDirectory())
dmt.add(new DefaultMutableTreeNode(
files[ast].getName() + "\\"));
// else
// dmt.add(new DefaultMutableTreeNode(
// files[ast].getName()));
}
t.validate();
}
// hier sollte eigentlich jetzt im Hauptfeld der Inhalt ausgegeben werden, aber da
// ist nich der Wurm drin :-(
if (file.isFile())
if ((files = file.listFiles()).length > 0) {
dmt.removeAllChildren();
for (int ast = 0; ast < files.length; ast++) {
if (files[ast].isFile())
dmt.add(new DefaultMutableTreeNode(
files[ast].getName()));
}
f.validate();
}
//f.setText();
}
});
this.add(l, BorderLayout.NORTH);
this.add(new JScrollPane(t), BorderLayout.WEST);
this.add(new JScrollPane(f), BorderLayout.CENTER);
this.setVisible(true);
}
public static void main(String[] args) {
new FileBrowser();
}
class JFileTree extends JTree {
public JFileTree() {
this.setModel(new DefaultTreeModel(this.getRoot()));
this.setCellRenderer(new FileRenderer());
}
public DefaultMutableTreeNode getRoot() {
File f = new File("C:\\");
File[] files = f.listFiles();
DefaultMutableTreeNode root = new DefaultMutableTreeNode(f
.getPath());
for (int ast = 0; ast < files.length; ast++) {
if (files[ast].isDirectory())
root.add(new DefaultMutableTreeNode(files[ast].getName()
+ "\\"));
// else
// root.add(new DefaultMutableTreeNode(files[ast].getName()));
}
return root;
}
class FileRenderer extends DefaultTreeCellRenderer {
private Icon directoryIcon;
public FileRenderer() {
directoryIcon = this.getDefaultClosedIcon();
}
public Component getTreeCellRendererComponent(JTree tree,
Object value, boolean sel, boolean expanded, boolean leaf,
int row, boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, sel, expanded,
leaf, row, hasFocus);
if (isDirectory(value))
setIcon(directoryIcon);
return this;
}
private Object[] o;
private String s;
private File file;
protected boolean isDirectory(Object value) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
o = node.getUserObjectPath();
s = "";
for (Object ob : o) {
s = s + ob;
}
file = new File(s);
if (file.isDirectory())
return true;
else
return false;
}
}
}
}