JTree Frage

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo

ich möchte einen JTree erstellen der mir von einem Ordner ausgehend z.B. c:\\ nun alle ordner auflistet die dateien mit der endung .dat enthalten. Also so richtig Pfadmäsig usw. Der Baum soll sich so durch die Pfadstruktur ziehen, jedoch nur die Pfäde mit einer .dat Datei.

Gibt es da etwas anderes als den JTree, oder muss ich hier nun etwas aufwendigeres programmieren um dies zu erreichen?
 
G

Guest

Gast
ok ich habe mal bisschen gegoogelt und folgendes gefunden

Code:
import java.io.File;

import javax.swing.event.TreeModelListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;


/**
 * The methods in this class allow the JTree component to traverse
 * the file system tree, and display the files and directories.
 **/
public class FileTreeModel implements TreeModel 
{
    // We specify the root directory when we create the model.
    protected File root;
    public FileTreeModel(File root) 
    { 
        this.root = root; 
    }

    // The model knows how to return the root object of the tree
    public Object getRoot() 
    { 
        return root; 
    }

    // Tell JTree whether an object in the tree is a leaf or not
    public boolean isLeaf(Object node) 
    {  
        if(node.toString().contains(".properties"))
        {
            return ((File)node).isFile();
        }
        else
        {
            return false;
        }
            
    }

    // Tell JTree how many children a node has
    public int getChildCount(Object parent) {
        String[] children = ((File)parent).list();
        if (children == null) 
            return 0;
        return children.length;
    }

    // Fetch any numbered child of a node for the JTree.
    // Our model returns File objects for all nodes in the tree.  The
    // JTree displays these by calling the File.toString() method.
    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]);
    }

    // Figure out a child's position in its parent node.
    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;
  }

    // This method is only invoked by the JTree for editable trees.  
    // This TreeModel does not allow editing, so we do not implement 
    // this method.  The JTree editable property is false by default.
    public void valueForPathChanged(TreePath path, Object newvalue) {}

    // Since this is not an editable tree model, we never fire any events,
    // so we don't actually have to keep track of interested listeners.
    public void addTreeModelListener(TreeModelListener l) {}
    public void removeTreeModelListener(TreeModelListener l) {}
}

Code:
private void tree()
    {
       
        
        File root = new File("E:\\");
        
        //if (args.length > 0) root = new File(args[0]);
        //else root = new File(System.getProperty("user.home"));

        // Create a TreeModel object to represent our tree of files
        FileTreeModel model = new FileTreeModel(root);

        // Create a JTree and tell it to display our model
        JTree tree = new JTree();
        tree.setModel(model);
        left.add(tree);
        // The JTree can get big, so allow it to scroll.
        JScrollPane scrollpane = new JScrollPane(left);
        scrollpane.setBorder(BorderFactory.createLineBorder(Color.blue , 4));
        scrollpane.setViewportView(left);
        scrollpane.getViewport().setView(left);
        f.add(scrollpane, BorderLayout.LINE_START);
        left.setBackground(Color.white);
    }

damit bekomme ich das grundsätzlich hin, jedoch habe ich nun die probleme

1.) Das als node immer der komplette pfad angezeigt wird.. das ist etwas nervig bei großer strucktur, wie bekomme ich hin, dass er nur den momentan namen des ordners/datei anzeigt im baum.

2.) Werden immernoch alle pfade angezeigt, jedoch will ich nur die pfade angezeigt beommen bei denen ich auch eine .dat datei finden kann.

Kann mir pls jmd helfen hierbei.. bin echt am verzweifeln.
 

der JoJo

Bekanntes Mitglied
1.) mit String.substring() kannste dir den Pfad abschneiden
z.b.:
Code:
String bla="rofl/lol.dat";
String name=bla.substring(bla.lastIindexOf("/"),bla.length());

2.) hm, das musst du wahrscheinlich peer hand in jede Funktion eintragen. (du kannst ja mit substring die endung der Datei abschneiden und dann schauen, ob das .dat entspricht)
Problematisch ist das nur bei Ordnern, da du ja die kinder des Ordners erst kennst, wenn er aufgeklappt wird, daher kann man da noch nicht bestimmen ob der Ordner eine datei mit der Endung .dat enthält. die einzigste möglichkeit ist den Baum komplet selber zu bauen (rekursiv) und erst wenn alles eingelesen ist zu entscheiden welcher Knoten nun wirklich an den Baum kommt.

#edit wobei die bei der recursiven-selbst-zusammen-bau-variante mit 90% wahrscheinlichkeit der HeapSpace von Java um die Ohren fliegen wird :wink:
 

AlArenal

Top Contributor
- kompletten Baum einlesen
- Baum vom Root-Node aus traversieren
- durchlaufene Nodes der Reihe nach auf einen Stack schieben
- wenn keine Kinder im Baum mehr vorhanden sind Nodes vom Stack holen und daraus löschen, wenn sie keine .dat Dateien sind
- wenn aktuelles Element auf dem Stack .dat ist den Stack in ein Array umwandeln und daraus einen TreePath machen (dafür gibts nen eigenen Konstruktor); evtl. muss das Array umgekehrt werden (habs nicht mehr genau im Kopf)
- TreePath in einer Collection ablegen
- wenn der Baum fertig durchlaufen ist eine Schleife durchlaufen, in der bei jedem Durchlauf alle gesicherten TreePaths angefasst werden und der Reihe nach Element 0, 1, .., n (soweit im jeweiligen TreePath vorhanden) durchlaufen und in ein neues TreeModel überführt wird, bis alle Elemente aller TreePaths durchlaufen sind

Am Ende hat man dann ein TreeModel, das nur noch Pfade enthält letzte Nodes eine Datei vom Typ .dat enthalten.

Wenn man den Check schon beim Einlesen des Baums macht, kann man natürlich noch etwas "abkürzen".
 

der JoJo

Bekanntes Mitglied
da darfts du aber auf gar keine fall C: als root wählen !
sonnst is Feierabend mit Speicher!
 
G

Guest

Gast
Code:
 private void tree(File currentFile,DefaultMutableTreeNode currentNode )
    {
        File[] files = currentFile.listFiles();
        
        if (files != null)
        { //Have the rights to list Files in this folder
            for (int i = 0; i < files.length; i++)
            {
                if (files[i].isDirectory())
                {// File is a Folder
                    Icon leafIcon = new ImageIcon("C:\\middle.gif");
                  
                   
                    DefaultMutableTreeNode folder = new DefaultMutableTreeNode( files[i].getName() );
                
                    currentNode.add(folder);
                    tree(files[i], folder);
                }
                else
                {
                    if(files[i].getName().contains(".dat"))
                    {
                        DefaultMutableTreeNode file = new DefaultMutableTreeNode( files[i].getName() );
                        currentNode.add(file);
                        hits.add(files[i]);
                    }
                    else
                    {
                       // do nothing atm 
                    } 
                }
            }
            if(currentFile != rootFile)
            {
                currentFile = currentFile.getParentFile();
            }
            else
            {
                left.add(tree);
                JScrollPane scroll = new JScrollPane( left );
                scroll.setBorder(BorderFactory.createLineBorder(Color.blue , 4));
                scroll.setViewportView(left);
                scroll.getViewport().setView(left);
                f.add(scroll, BorderLayout.LINE_START);
                left.setBackground(Color.white);
            }
 }

Ich habe es nun soweit, dass es mir ein Baum Darstellt.

Jedoch zeigt er mir im Jtree alle Ordner die Keinen inhalt haben als dateien an(also das Icon der Dateien...)
Wie kann ich nun ändern, dass er Ordner die leer sind auch als ordner anzeigt und nicht als Dateien... das Mit dem renderer verstehe ich leider nicht so ganz, kann das mal einer erklären bzw. nen bsp code posten wie ich das hinbekommen könnt??
 
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 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
G JTree vollständigen pfad anzeigen Java Basics - Anfänger-Themen 11
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
J Frage zum Quellcode - Zusammhänge und Ablauf. Java Basics - Anfänger-Themen 2
D Erste Schritte Frage eines absoluten Anfängers Java Basics - Anfänger-Themen 3
Zrebna Frage zu Test-Driven Development (TDD) Java Basics - Anfänger-Themen 3
I Frage Thymeleaf -> Fehler ignorieren und mit "" ersetzen? Java Basics - Anfänger-Themen 15
I Frage Thymeleaf -> Prefix / Suffix ändern? Java Basics - Anfänger-Themen 11
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4
T Frage zu Parse Java Basics - Anfänger-Themen 2
H Frage an die Profis Java Basics - Anfänger-Themen 4
J Eine konzeptionelle Frage zu OOP Java Basics - Anfänger-Themen 3
P Frage zu Rekursion und Backtracking Java Basics - Anfänger-Themen 2
H Frage zur Ausgabe Java Basics - Anfänger-Themen 4
H Frage zu arithmetischen Operationen Java Basics - Anfänger-Themen 20
F Kurze Frage zu replace() Java Basics - Anfänger-Themen 19
JavaSchmecktLecker Polymorphie Frage zur Methodenüberschreibung Java Basics - Anfänger-Themen 21
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
B Erste Schritte Frage zu Instanzierung und Referenzen Java Basics - Anfänger-Themen 8
DoubleM Runtime.getRuntime().exec Frage Java Basics - Anfänger-Themen 2
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
O Frage: Formaler Typbezeichner? Java Basics - Anfänger-Themen 3
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben