Hallo,
ich möchte gern das Dateisystem in einem JTree Menü darstellen. Mit etwas probieren bin ich nun soweit, dass das FileSystem auch dargestellt wird. Mein Problem ist, das er das Icon für einen Ordner erst "aktualisiert", wenn man diesen anklickt; vorher sieht der aus wie eine Datei. Was kann ich tn, damit er bereits beim anklicken entsprechend aussieht?
Hier mein Code:
Mein JTRee, der auf "Klicks" reagiert und die nächste Ebene anzeigen soll (Methode addNextLayer)
Zunächst bestimme die Laufwerke, wie ich es hier im Forum gefunden habe
Das anzeigen der erzeugen nächsten Ebene
Eine rekursive Methode kommt wohl nicht in Frage, da diese (je nach Anzahl der Laufwerke und Ordner) ewig braucht.
Wie gesagt, es funktioniert so weit alles nur das Symbol kommt nicht.
Milo
ich möchte gern das Dateisystem in einem JTree Menü darstellen. Mit etwas probieren bin ich nun soweit, dass das FileSystem auch dargestellt wird. Mein Problem ist, das er das Icon für einen Ordner erst "aktualisiert", wenn man diesen anklickt; vorher sieht der aus wie eine Datei. Was kann ich tn, damit er bereits beim anklicken entsprechend aussieht?
Hier mein Code:
Mein JTRee, der auf "Klicks" reagiert und die nächste Ebene anzeigen soll (Methode addNextLayer)
Code:
fileTreeJT.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener(){
public void valueChanged(final TreeSelectionEvent e){
try {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) e.getNewLeadSelectionPath().getLastPathComponent();
Object[] o = node.getUserObjectPath();
String pfad = "";
for (int i=1; i<o.length; i++)
pfad += o[i].toString().endsWith(File.separator)?o[i].toString():o[i].toString()+File.separator;
if (o.length>1)
addNextLayer(node, new File( pfad ));
fileTreeJT.validate();
fileTreeJT.repaint();
} catch (Exception error) {}
}
});
Zunächst bestimme die Laufwerke, wie ich es hier im Forum gefunden habe
Code:
FileSystemView fsv = FileSystemView.getFileSystemView();
File files[] = File.listRoots();
for(File file : files){
DefaultMutableTreeNode node = new DefaultMutableTreeNode( file );
dmt.add( node );
try {
if (!fsv.isFloppyDrive(file))
addNextLayer(node, file);
//System.out.println(file.toString( ) + " " + fsv.getSystemTypeDescription(file)+" "+file.getCanonicalPath());
}catch(Exception e) { }
}
Das anzeigen der erzeugen nächsten Ebene
Code:
private void addNextLayer(DefaultMutableTreeNode parent, File dir){
if (parent != null && dir != null && dir.exists() && dir.listFiles() != null){
File[] files = dir.listFiles();
for (int i=0; i<files.length; i++ ){
if (files[i] != null && files[i].exists()){
DefaultMutableTreeNode node = new DefaultMutableTreeNode(files[i].getName());
if (files[i].isDirectory()){
//addNextLayer(node, files[i]); //Rekursion, wenn Ordner
}
parent.add( node );
}
}
}
}
Eine rekursive Methode kommt wohl nicht in Frage, da diese (je nach Anzahl der Laufwerke und Ordner) ewig braucht.
Wie gesagt, es funktioniert so weit alles nur das Symbol kommt nicht.
Milo