Hallo zusammen,
ich habe mir mal wieder aus ein paar Codeschnipsel (alle hier aus dem Forum
) etwas zusammengestellt. Ich möchte mit mit dem JFileChooser das Verzeichnis auswählen und dann im JTree das Ergebnis anzeigen.
Wie schaffe ich es, dass der bereits gezeichnete JTree nach der Auswahl über JFileChosser aktualisiert wird?
ich habe mir mal wieder aus ein paar Codeschnipsel (alle hier aus dem Forum
Wie schaffe ich es, dass der bereits gezeichnete JTree nach der Auswahl über JFileChosser aktualisiert wird?
Code:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
public class Explorer extends JFrame implements ActionListener {
public JFrame frame;
public JScrollPane scrollpane;
public File root;
public FileTreeModel model;
public JTree tree;
public String pathName = "";
public JButton selectPath;
public Explorer() {
if (pathName.equals(""))
root = new File("h:\\");
else
root = new File(pathName);
model = new FileTreeModel(root);
tree = new JTree(model);
scrollpane = new JScrollPane(tree);
selectPath = new JButton("Auswahl");
selectPath.addActionListener(this);
// frame = new JFrame("FileTreeDemo");
getContentPane().add(scrollpane, "Center");
getContentPane().add(selectPath, "South");
addWindowListener( new WindowAdapter(){
public void windowClosing( WindowEvent e ) {
exit();
}
});
setTitle("Test");
setSize(400,600);
setVisible(true);
}
public void actionPerformed(ActionEvent evt){
Object source = evt.getSource();
if (source == selectPath) {
getPath();
}
}
public void exit(){
System.exit( 0 );
}
public static void main(String[] args) {
Explorer ex = new Explorer();
}
public String getPath() {
// Dateiauswahl einrichten
JFileChooser chooser;
chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("."));
//Es werden Verzeichnisse und keine Dateien angezeigt. Ergo können nur Verzeichnisse ausgewählt werden.
chooser.setFileSelectionMode(1);
// Dateiauswahldialogfeld anzeigen
int result = chooser.showDialog(frame, "Transfer");
// Falls Textdatei akzeptiert, als Symbol des Bezeichnungsfeldes festlegen
if (result == JFileChooser.APPROVE_OPTION) {
pathName = chooser.getSelectedFile().getPath();
}
if (result == JFileChooser.CANCEL_OPTION) {
pathName = "";
dispose();
}
return pathName;
}
}
class FileTreeModel implements TreeModel {
protected File root;
public FileTreeModel(File root) { this.root = root; }
public Object getRoot() { return root; }
public boolean isLeaf(Object node) { return ((File)node).isFile(); }
public int getChildCount(Object parent) {
String[] children = ((File)parent).list();
if (children == null) return 0;
return children.length;
}
public Object getChild(Object parent, int index) {
String[] children = ((File)parent).list();
if ((children == null) || (index >= children.length)) return null;
return new File((File) parent, children[index]);
}
public int getIndexOfChild(Object parent, Object child) {
String[] children = ((File)parent).list();
if (children == null) return -1;
String childname = ((File)child).getName();
for(int i = 0; i < children.length; i++) {
if (childname.equals(children[i])) return i;
}
return -1;
}
public void valueForPathChanged(TreePath path, Object newvalue) {}
public void addTreeModelListener(TreeModelListener l) {}
public void removeTreeModelListener(TreeModelListener l) {}
}