JTree vollständigen pfad anzeigen

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
hallo ich hab ein JTree gemacht.

wobei

wenn ich auf c: klicke diese schleife kommt:

Code:
  for(int childIndex=1; childIndex<daten.length; childIndex++) {
    child = new DefaultMutableTreeNode(daten[childIndex].toString());
    if(daten[childIndex].isFile() ==false)  {
    root.add(child);
    File[] datenzwei = daten[childIndex].listFiles();

das blöde ist, ich weiß ja nie wie wiet es reichen kann.
z.b ob es einen ordner C:\ programme\eins\zwei\drei\vier\fünf\sechs gibt.
mit einer for schleife müsste ich 7 schleifen machen und man weiß ja nie ob das dann komplett ist.

der punkt ist wie kann ich einen JTree machen mit dem ich absolut jeden ordner sehen kann, egal wie tief er verzweigt ist ?
 

EOB

Top Contributor
als da wuerde ich auf ne loesung ausm netz zugreifen. das ist doch relativ kompliziert...hab das auch mal so gemacht. das hier scjeint ganz gut zu sein.

gruesse
 
G

Gast

Gast
hmm thx erstma aber, ich will auch wissen wie es funktioniert, aber bei diesem code sind nichtmal kommentare.

aber das ist wenigstens der erste funktionierende code ausm i net
thx!
 

EOB

Top Contributor
ich fuer meinen teil habs aufgegeben immer alles kapieren zu wollen :cool: . aber man sollte schon in der lage sein, sowas zu erweitern.

gruesse
 
G

Gast

Gast
also ich hab jetzt einen ansatz undzwar, wenn eine node expanded wird sollen alle unternodes angezeigt werden.

könnt ihr mir den code geben? ^^
 

EOB

Top Contributor
hi, wo ist da der ansatz, wenn wir dir den code geben? mal ganz davon abgesehen, dass ich keinen hier hab :). also du musst halt mit einem expansionlistener lauschen, wenn ein knoten aufgemacht wird. dann den pfad holen, der ja sicher ein dir ist und dann rekursiv alle elemente dieses directories holen. dann eben wieder alles darstellen...

gruesse
 
G

Gast

Gast
jo hab ich aber der TreePath als String sieht so aus:

[root, C:\] (root ist nurn name)

und ich will diese ausgabe ja als File speichern. und ein File mit
[root, C:\] gibts ja nicht (jedenfalls bei mir ;) .

also wie kann ich das in eine für File gültigen String machen?

bsp. : [root,c:\] wird zu c:\
 

EOB

Top Contributor
hi, na eine methode schreiben, oder eine parserklasse, die dir das als pfad zurueckgibt. also [] abschneiden, dann ab , splitten und andersrum zusammensetzen und gegebenfalls das root weglassen.

gruesse
 
G

Guest

Gast
also hier ist nochmal mein sog. Ansatz


Code:
 public void treeExpanded(TreeExpansionEvent event) {
  	
  	TreePath path = event.getPath();
  	currentSelectionField.setText(path.toString());
  	DefaultMutableTreeNode TreeNode;
  	File datei = new File(path.toString());
  	if( datei.isFile() == false) {
  	File[] node = datei.listFiles();
  	
  	for( int i = 1; i < node.length; i++) {
  		TreeNode = new DefaultMutableTreeNode(node[i].toString());
  		root.add(TreeNode);
  		
  		
  		
  		
  	}
  }

wenn irgendwo erweitert wird, wird erstmal der pfad herausgefunden.
der pfad wird in File "konvertiert" und die darunterleigenden files werden aufgelistet.
die aufgelistet files werden dann dem baum geaddet.

fas problem jetzt:

1. der path ist wie ober beschrieben... schlecht.
2. ich weiß nicht wohin ich die files adden soll, deshalb hab ich zur not root genommen.
3. es klappt alles nicht

HILFE!!!
 

EOB

Top Contributor
hi, warum nimmst du nicht das beispiel von oben? da ists doch alles prima? hier mal der code mit richtigen pfaden. unter linux gehts...uner win hab ichs nicht getestet...ist jetzt eher so schnell zusammengebaut, aber es geht:). bau dir am besten noch ne extra methode bzw. klase dafuer.

Code:
/*
 * FileTreeFrame.java
 *
 * Created on 6 October 2006, 10:57
 *
 */

package javastuff;

/**
 *
 * @author Andreas Golchert
 */
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.JTree;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;

public class FileTreeFrame extends JFrame {
    private JTree fileTree;
    
    private FileSystemModel fileSystemModel;
    
    private JTextArea fileDetailsTextArea = new JTextArea();
    
    public FileTreeFrame(String directory) {
        super("JTree FileSystem Viewer");
        fileDetailsTextArea.setEditable(false);
        fileSystemModel = new FileSystemModel(new File(directory));
        fileTree = new JTree(fileSystemModel);
        fileTree.setEditable(true);
        fileTree.addTreeSelectionListener(new TreeSelectionListener() {
            public void valueChanged(TreeSelectionEvent event) {
                File file = (File) fileTree.getLastSelectedPathComponent();
                fileDetailsTextArea.setText(getFileDetails(file));
            }
        });
        JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, new JScrollPane(
                fileTree), new JScrollPane(fileDetailsTextArea));
        getContentPane().add(splitPane);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(640, 480);
        setVisible(true);
        
        fileTree.addTreeSelectionListener(new TreeSelectionListener() {
            public void valueChanged(TreeSelectionEvent evt) {
                // Get all nodes whose selection status has changed
                TreePath path = evt.getPath();
                
                String s = path.toString();
                System.out.println("path: " + s);
                
                String[] sa=s.split(",");
                
                ArrayList<String> list = new ArrayList<String>();
                
                String fs = System.getProperty("file.separator");
                
                String realPath="";
                
                for(String elem:sa){
                    elem=elem.trim();
                    elem=elem.replaceAll("\\[", "");
                    elem=elem.replaceAll("\\]", "");
                    System.out.println("pfadelement:" + elem);
                    list.add(elem);
                }
                
                
                for(int i=0; i<list.size();i++){
                    realPath+=fs+list.get(i);
                }
                realPath=realPath.replaceAll(fs+"+", fs);
                System.out.println("der pfad: " + realPath);
                
            }
        });
    }
    
    private String getFileDetails(File file) {
        if (file == null)
            return "";
        StringBuffer buffer = new StringBuffer();
        buffer.append("Name: " + file.getName() + "\n");
        buffer.append("Path: " + file.getPath() + "\n");
        buffer.append("Size: " + file.length() + "\n");
        return buffer.toString();
    }
    
    public static void main(String args[]) {
        new FileTreeFrame("/");
    }
}

class FileSystemModel implements TreeModel {
    private File root;
    
    private Vector listeners = new Vector();
    
    public FileSystemModel(File rootDirectory) {
        root = rootDirectory;
    }
    
    public Object getRoot() {
        return root;
    }
    
    public Object getChild(Object parent, int index) {
        File directory = (File) parent;
        String[] children = directory.list();
        return new TreeFile(directory, children[index]);
    }
    
    public int getChildCount(Object parent) {
        File file = (File) parent;
        if (file.isDirectory()) {
            String[] fileList = file.list();
            if (fileList != null)
                return file.list().length;
        }
        return 0;
    }
    
    public boolean isLeaf(Object node) {
        File file = (File) node;
        return file.isFile();
    }
    
    public int getIndexOfChild(Object parent, Object child) {
        File directory = (File) parent;
        File file = (File) child;
        String[] children = directory.list();
        for (int i = 0; i < children.length; i++) {
            if (file.getName().equals(children[i])) {
                return i;
            }
        }
        return -1;
        
    }
    
    public void valueForPathChanged(TreePath path, Object value) {
        File oldFile = (File) path.getLastPathComponent();
        String fileParentPath = oldFile.getParent();
        String newFileName = (String) value;
        File targetFile = new File(fileParentPath, newFileName);
        oldFile.renameTo(targetFile);
        File parent = new File(fileParentPath);
        int[] changedChildrenIndices = { getIndexOfChild(parent, targetFile) };
        Object[] changedChildren = { targetFile };
        fireTreeNodesChanged(path.getParentPath(), changedChildrenIndices, changedChildren);
        
    }
    
    private void fireTreeNodesChanged(TreePath parentPath, int[] indices, Object[] children) {
        TreeModelEvent event = new TreeModelEvent(this, parentPath, indices, children);
        Iterator iterator = listeners.iterator();
        TreeModelListener listener = null;
        while (iterator.hasNext()) {
            listener = (TreeModelListener) iterator.next();
            listener.treeNodesChanged(event);
        }
    }
    
    public void addTreeModelListener(TreeModelListener listener) {
        listeners.add(listener);
    }
    
    public void removeTreeModelListener(TreeModelListener listener) {
        listeners.remove(listener);
    }
    
    private class TreeFile extends File {
        public TreeFile(File parent, String child) {
            super(parent, child);
        }
        
        public String toString() {
            return getName();
        }
    }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G JTree speichern und wieder einlesen Java Basics - Anfänger-Themen 5
C Unbekannte Methode add bei Klasse die JTree erweitert Java Basics - Anfänger-Themen 14
J ActionListener von JCheckBox im Knoten von JTree funktioniert nicht Java Basics - Anfänger-Themen 2
F Jtree kürzt Namen auf ... Java Basics - Anfänger-Themen 4
H Collections JTree remove zeigt keinen Effekt! Java Basics - Anfänger-Themen 8
H Best Practice Wo wird der rootNode eines JTree gespeichert... Java Basics - Anfänger-Themen 0
H Erste Schritte JTree: Instanzen einer Klasse speichern oder Namen/Strings... Java Basics - Anfänger-Themen 4
R JTree bewegen Java Basics - Anfänger-Themen 6
I JTree, Root-Name ändern Java Basics - Anfänger-Themen 4
N Dynamisch JTree erstellen Java Basics - Anfänger-Themen 3
G bestimmte dateiendungen in jtree rausfiltern Java Basics - Anfänger-Themen 7
P JTree aus txt Java Basics - Anfänger-Themen 8
M Warum wird mein Icon bei den JTree Nodes nicht angezeigt? Java Basics - Anfänger-Themen 7
JStickman JTree, JScrollPane, Liste mit graphischer Suchleiste - Dateimanager Java Basics - Anfänger-Themen 10
M JTree + JTab Java Basics - Anfänger-Themen 3
T JTree füllen Java Basics - Anfänger-Themen 3
B JTree knoten wird nicht übernommen Java Basics - Anfänger-Themen 4
S JTree Hilfe Java Basics - Anfänger-Themen 6
P Jtree MouseListener und NoCollapse Java Basics - Anfänger-Themen 2
M JTree ohne root anzeigen Java Basics - Anfänger-Themen 5
F JTree mit JSpinner Java Basics - Anfänger-Themen 2
I Liste von Dateien anzeigen/JTree Java Basics - Anfänger-Themen 4
G Zugriff auf JTree-Objekt Java Basics - Anfänger-Themen 2
K Problem: JTree mit integrierten JCheckboxen Java Basics - Anfänger-Themen 5
B OOP Jtree aus TreeMap<String, String[]> erstellen? Java Basics - Anfänger-Themen 6
D JTree ich dreh durch :D Java Basics - Anfänger-Themen 2
T JTree root setzten Java Basics - Anfänger-Themen 13
G xml Datei in JTree Java Basics - Anfänger-Themen 2
S JTree, Problem mit View Update Java Basics - Anfänger-Themen 2
R Problem mit JTree und JTable Java Basics - Anfänger-Themen 16
A JTree drucken Java Basics - Anfänger-Themen 2
M JTree und ein Button mit ActionListener Java Basics - Anfänger-Themen 3
G Verständnisproblem --> JTree Java Basics - Anfänger-Themen 6
G Filesystem in JTree anzeigen Java Basics - Anfänger-Themen 4
A Jtree Aufbau Java Basics - Anfänger-Themen 5
G JTree ilstener Java Basics - Anfänger-Themen 3
G JTree Java Basics - Anfänger-Themen 2
G Erstellten JTree aus einer XML-Datei akktualisieren Java Basics - Anfänger-Themen 11
S jTree initialisierung Java Basics - Anfänger-Themen 4
F Doppelklick-Event auf JTree Java Basics - Anfänger-Themen 5
J ArrayListen mit Name und Vater an JTree übergeben Java Basics - Anfänger-Themen 3
G aussehen vom jtree wiederherstellen Java Basics - Anfänger-Themen 3
P JTree mit mehreren Wurzeln Java Basics - Anfänger-Themen 2
G Umbenennen im JTree Java Basics - Anfänger-Themen 5
G rechter Mausklick im JTree Java Basics - Anfänger-Themen 2
G Bilder im jTree Java Basics - Anfänger-Themen 3
G jTree Pfad merken Java Basics - Anfänger-Themen 2
S JTree aktualisieren Java Basics - Anfänger-Themen 4
M JTree aktualisieren Java Basics - Anfänger-Themen 3
E JTree - Element suchen Java Basics - Anfänger-Themen 5
G JTree Problem. Java Basics - Anfänger-Themen 5
G JTree Java Basics - Anfänger-Themen 2
E JTree - Verzeichnisbaum Java Basics - Anfänger-Themen 3
G JTree Frage Java Basics - Anfänger-Themen 5
G Ebene von JTree ermitteln? Java Basics - Anfänger-Themen 6
G Icons für JTree skalieren? Java Basics - Anfänger-Themen 3
G Standard JTree ausblenden? Java Basics - Anfänger-Themen 5
B JTree mit Verzeichnissen füllen Java Basics - Anfänger-Themen 17
G Object vor reload von JTree merken und danach wieder setzen? Java Basics - Anfänger-Themen 5
P Wert aus JTree in ComboBox setzen? Java Basics - Anfänger-Themen 2
G Problem mit Refresh von JTree Java Basics - Anfänger-Themen 11
lomtas Scrollbalken für JTree Java Basics - Anfänger-Themen 3
lomtas JTree Struktur im Nachhinein ändern Java Basics - Anfänger-Themen 2
K JTree verlinken Java Basics - Anfänger-Themen 3
T ArrayList mit Dateien in die richtigen Ordner eines JTree Java Basics - Anfänger-Themen 16
K JTree aus DB rekursiv füllen Java Basics - Anfänger-Themen 12
M Dateisystem in Jtree - Ordnericon darstellen Java Basics - Anfänger-Themen 4
R JTree aus einer ArrayList Java Basics - Anfänger-Themen 9
J JTree Bilder Java Basics - Anfänger-Themen 2
G JTree.TreeListener Java Basics - Anfänger-Themen 12
S JTree valueChanged() Ausgabe leider immer mit Pfadangabe! Java Basics - Anfänger-Themen 4
S JTree aktualisieren bzw. komplett neu aufbauen Java Basics - Anfänger-Themen 6
G Scrollen im JTree Java Basics - Anfänger-Themen 17
G Hintergrundsfarbe für JTree Java Basics - Anfänger-Themen 15
F JTree-Knoten (DefaultMutableTreeNode) formatieren ? Java Basics - Anfänger-Themen 3
Y JTree: ein Knoten als Objekt Java Basics - Anfänger-Themen 2
J JTable / JTree: Unsichtbare Elemente Java Basics - Anfänger-Themen 4
G JTree Explorer Problem mit listRoots() Java Basics - Anfänger-Themen 9
V Jtree: Alle Verzeichnisse und Ordner anzeigen, aber wie? Java Basics - Anfänger-Themen 2
W Dotenv relativer vs absoluter Pfad Java Basics - Anfänger-Themen 2
J Pfad zerlegen Java Basics - Anfänger-Themen 2
berserkerdq2 Wie gebe ich den Pfad zu einer Datei an, die in einem Ordner in Eclipse ist? Java Basics - Anfänger-Themen 1
S Längster Pfad zwischen zwei Vertices in einem Graph Java Basics - Anfänger-Themen 3
C Pfad zu Properties-File bei ResourceBundle Java Basics - Anfänger-Themen 7
CptK Richtigen Pfad beim einlesen von Datei finden Java Basics - Anfänger-Themen 2
P Möglichen Pfad überprüfen Java Basics - Anfänger-Themen 5
M Java GUI explorer aufrufen um Pfad zu bekommen Java Basics - Anfänger-Themen 3
R FXMLLoader Pfad falsch`? Java Basics - Anfänger-Themen 4
S Alternativer Pfad Java Basics - Anfänger-Themen 5
R speicherort Mac pfad angeben Java Basics - Anfänger-Themen 3
L Breadth-First Search statt einem Pfad, alle Pfade herausfinden Java Basics - Anfänger-Themen 4
O Best Practice Datei-Pfad zerlegen Java Basics - Anfänger-Themen 4
topi relativer Pfad in einem Runnable JAR file Java Basics - Anfänger-Themen 12
H pfad finden Java Basics - Anfänger-Themen 12
H Pfad Program Files\Common Files\Oracle\Java\javapath Java Basics - Anfänger-Themen 3
L Pfad zum Jar Java Basics - Anfänger-Themen 7
it_is_all Bild-Pfad wird gefunden, nicht aber Textdatei-Pfad Java Basics - Anfänger-Themen 8
J Leerzeichen im Pfad automatisch erkennen Java Basics - Anfänger-Themen 30
B Log4J Pfad des Logfiles definieren Java Basics - Anfänger-Themen 6
D Umgebungsvariable Pfad javaw.exe für Programmstart auf Windows Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben