TreePath selbst erstellen und expandPath

Ingerten

Bekanntes Mitglied
Hallo Männers,

ich habe da ein Problem, wo ich einfach nicht weiter komme und ich es schon mit verschiedenen Methoden versucht habe.

Ich möchte eigentlich nur, einen TreePath selbst er stellen und ihn dann mit expandPath öffnen.
Es klappt aber nicht.

Ich hoffe sowas ist überhaubt möglich.

Hier ein Beispiel:

Java:
import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.swing.JButton;

import java.awt.BorderLayout;

import javax.swing.JTextField;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class FileBrowser implements Runnable {

    private DefaultMutableTreeNode root;

    private DefaultTreeModel treeModel;

    private JTree tree;

    /**
     * @wbp.parser.entryPoint
     */
    @Override
    public void run() {
        JFrame frame = new JFrame("File Browser");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        final File fileRoot = new File("C:/workspace/testJTree/daten");
        root = new DefaultMutableTreeNode(new FileNode(fileRoot));
        treeModel = new DefaultTreeModel(root);
     
        JButton btnNewButton = new JButton("suche");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                List list = new ArrayList();
                list.add(fileRoot);
                list.add("a");
                list.add("1");
                System.out.println(new TreePath(list.toArray()));
                tree.expandPath(new TreePath(list.toArray()));
            }
        });
        frame.getContentPane().add(btnNewButton, BorderLayout.NORTH);

        tree = new JTree(treeModel);
        tree.setShowsRootHandles(true);
        JScrollPane scrollPane = new JScrollPane(tree);

        frame.getContentPane().add(scrollPane);
        frame.setLocationByPlatform(true);
        frame.setSize(640, 480);
        frame.setVisible(true);

        CreateChildNodes ccn =
                new CreateChildNodes(fileRoot, root);
        new Thread(ccn).start();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new FileBrowser());
    }

    public class CreateChildNodes implements Runnable {

        private DefaultMutableTreeNode root;

        private File fileRoot;

        public CreateChildNodes(File fileRoot,
                DefaultMutableTreeNode root) {
            this.fileRoot = fileRoot;
            this.root = root;
        }

        @Override
        public void run() {
            createChildren(fileRoot, root);
        }

        private void createChildren(File fileRoot,
                DefaultMutableTreeNode node) {
            File[] files = fileRoot.listFiles();
            if (files == null) return;

            for (File file : files) {
                DefaultMutableTreeNode childNode =
                        new DefaultMutableTreeNode(new FileNode(file));
                node.add(childNode);
                if (file.isDirectory()) {
                    createChildren(file, childNode);
                }
            }
        }

    }

    public class FileNode {

        private File file;

        public FileNode(File file) {
            this.file = file;
        }

        @Override
        public String toString() {
            String name = file.getName();
            if (name.equals("")) {
                return file.getAbsolutePath();
            } else {
                return name;
            }
        }
    }

}
 

Anhänge

  • daten.PNG
    daten.PNG
    13,2 KB · Aufrufe: 73

Enceladus271

Bekanntes Mitglied
Klar ist das möglich. Im Pfad reichen allerdings keine Strings aus. Du musst dort die Referenzen der TreeNodes angeben. Z.B. so etwa:
tree.expandPath( new TreePath( new Object[] { root } ) );
 

Ingerten

Bekanntes Mitglied
Also,

ich habe es jetzt mal so versucht:

Java:
                DefaultMutableTreeNode nodeRoot = new DefaultMutableTreeNode(fileRoot);
                DefaultMutableTreeNode nodeA = new DefaultMutableTreeNode("a");
              
                TreeNode pathRoot = nodeRoot.getRoot();
                TreeNode path = nodeA.getRoot();         
              

                TreePath neu = new TreePath(new Object[]{pathRoot, path});
                tree.expandPath(neu);

Aber es passiert nichts.
 

Enceladus271

Bekanntes Mitglied
1. getRoot() gibt den Rootknoten des Baumes zurück in dem sich die TreeNodes befinden. Das bringt dir nichts.

2. Du brauchst wie gesagt die Referenzen der TreeNodes. Um das mal an einem kleinen Beispiel zu verdeutlichen:
Java:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;

public class PathExample {

   public static void main( String[] args ) {

     final DefaultMutableTreeNode root = new DefaultMutableTreeNode( "root" );
     final DefaultMutableTreeNode nodeA = new DefaultMutableTreeNode( "A" );
     final DefaultMutableTreeNode nodeB = new DefaultMutableTreeNode( "B" );
     final DefaultMutableTreeNode node1 = new DefaultMutableTreeNode( "1" );
     final DefaultMutableTreeNode node2 = new DefaultMutableTreeNode( "2" );

     root.add( nodeA );
     root.add( nodeB );
     nodeA.add( node1 );
     nodeB.add( node2 );

     final DefaultTreeModel treeModel = new DefaultTreeModel( root );
     final JTree tree = new JTree( treeModel );
     tree.collapseRow( 0 );

     final JButton northButton = new JButton( "expand (korrekt)" );
     northButton.addActionListener( new ActionListener() {

       @Override
       public void actionPerformed( ActionEvent arg0 ) {
         // So ist es richtig
         tree.expandPath( new TreePath( new Object[] { root, nodeA } ) );
       }
     } );

     final JButton southButton = new JButton( "expand (fehlerhaft)" );
     southButton.addActionListener( new ActionListener() {

       @Override
       public void actionPerformed( ActionEvent arg0 ) {
         // Wird nicht gehen, da im TreePath die Referenzen benötigt werden
         final DefaultMutableTreeNode cloneRoot = new DefaultMutableTreeNode( "root" );
         final DefaultMutableTreeNode cloneA = new DefaultMutableTreeNode( "A" );
         tree.expandPath( new TreePath( new Object[] { cloneRoot, cloneA } ) );
       }
     } );

     final JFrame frame = new JFrame();
     frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
     frame.add( tree, BorderLayout.CENTER );
     frame.add( northButton, BorderLayout.NORTH );
     frame.add( southButton, BorderLayout.SOUTH );
     frame.setSize( 400, 300 );
     frame.setVisible( true );
   }
}
Du brauchst eine Methode, die dir die Abfrage nach Nachfolgern erleichert. Die könnte z.B. so aussehen:
Java:
  public static DefaultMutableTreeNode getChildByName( TreeNode node, String name ) {
     for ( int i = 0; i < node.getChildCount(); i++ ) {
       final TreeNode child = node.getChildAt( i );
       if ( child instanceof DefaultMutableTreeNode ) {
         DefaultMutableTreeNode childNode = (DefaultMutableTreeNode) child;
         if ( childNode.getUserObject().toString().equals( name ) ) {
           return childNode;
         }
       }
     }
     return null;
   }
In deinem Code ganz oben kannst du dann einen Pfad so erstellen:
Java:
final DefaultMutableTreeNode nodeA = getChildByName( root, "a" );
final DefaultMutableTreeNode node1 = getChildByName( nodeA, "1" );
tree.expandPath( new TreePath( new Object[] { root, nodeA, node1 } ) );
 

JStein52

Top Contributor
Mal von der Diskussion mit Referenz oder nicht Referenz abgesehen ist mir nich ganz klar was der TE erreichen will. In seinem ursprünglichen Beispielcode hat er doch versucht in dem Action Listener zwei zusaetzliche Elemente in seinen Baum einzufügen (auch wenn er es falsch implementiert hat). Diese neuen Elemente kannst du doch nicht mit expandPath in deinen Baum einfügen !! Was hattest du denn erwartet was passiert ? expandPath stellt doch nur sicher dass der durch diesen Pfad spezifizierte Knoten aufgeklappt und sichtbar ist. Wenn es den Knoten im Baum nicht gibt passiert halt nichts.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S TreePath mit String vergleichen Java Basics - Anfänger-Themen 7
J Treepath mit XMLEncode in xml-Datei schreiben Java Basics - Anfänger-Themen 4
M Rest mit Spring boot oder selbst anlegen Java Basics - Anfänger-Themen 14
B Hotkeys selbst definieren? Java Basics - Anfänger-Themen 1
berserkerdq2 An selbst ersteller txt Datei immer Text dranhängen, ohne den vorherign Text zu löschen Java Basics - Anfänger-Themen 8
J selbst erstellte Datei mit Programm öffnen Java Basics - Anfänger-Themen 10
J ArrayList add methode selbst programmieren Java Basics - Anfänger-Themen 10
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
ruutaiokwu Bluetooth-Zugriff, braucht es dazu plattformabhängige Libraries oder kann das Java mittlerweile selbst? Java Basics - Anfänger-Themen 10
I Klasse selbst fortlaufend nummerieren lassen Java Basics - Anfänger-Themen 11
U Hashmap Iterator selbst implementieren Java Basics - Anfänger-Themen 10
S Tokenizer selbst implementieren Java Basics - Anfänger-Themen 1
M WindowStateListener selbst implementieren Java Basics - Anfänger-Themen 8
G MapStruct Anwendung vom selbst geschriebenen Formater Java Basics - Anfänger-Themen 4
F Kindklassen sollen Ihre Methoden selbst implementieren Java Basics - Anfänger-Themen 5
G Objekt der selben Klasse wie selbst mit Aufrufen des Konstruktors erzeugen Java Basics - Anfänger-Themen 14
S Code richtig / besser machbar? (Nicht sicher, ob Code selbst falsch ist) Java Basics - Anfänger-Themen 4
B Wie kann ich eine Methode einer selbst erstellten Klasse statisch importieren? Java Basics - Anfänger-Themen 5
O Werte selbst eintragen Java Basics - Anfänger-Themen 9
T Selbst erstellten Dateityp mit java Programm assoziieren? Java Basics - Anfänger-Themen 4
K Selbst renderndes Object auf null setzen Java Basics - Anfänger-Themen 1
M Eclipse startet nicht mehr (eclipse.exe beendet sich selbst)? Java Basics - Anfänger-Themen 5
D Exception selbst Implementieren Java Basics - Anfänger-Themen 1
E Array von Objekten einer selbst definierten Klasse mit eindeutigem Namen Java Basics - Anfänger-Themen 2
M Java Datei soll sich selbst löschen Java Basics - Anfänger-Themen 8
M Java Bukkit Plugin (selbst erstellt) Java Basics - Anfänger-Themen 9
S Listen Klasse selbst schreiben Java Basics - Anfänger-Themen 6
B Methoden Methode lässt sich nicht selbst aufrufen? Java Basics - Anfänger-Themen 3
H JFileChooser... dateispeicherpfad selbst aussuchen Java Basics - Anfänger-Themen 4
L Klassen Kann eine Klasse sich selbst returnen? Java Basics - Anfänger-Themen 26
T methode ruft sich selbst auf Java Basics - Anfänger-Themen 28
J importieren von selbst definierten klassen Java Basics - Anfänger-Themen 10
M JButton selbst nachprogrammieren Java Basics - Anfänger-Themen 3
J selbst erstellte Hashtabelle -- Warum Exception? Java Basics - Anfänger-Themen 3
K indexOf selbst rekursiv definieren Java Basics - Anfänger-Themen 4
M selbst gezipptes File lässt sich nicht öffnen Java Basics - Anfänger-Themen 2
S Deserialisieren auf sich selbst Java Basics - Anfänger-Themen 4
Developer_X JButton removt sich selbst Java Basics - Anfänger-Themen 32
G isEmpty selbst realisieren Java Basics - Anfänger-Themen 47
R Ein/Ausleseproblem von Datei mit selbst erstellten Objekten Java Basics - Anfänger-Themen 10
M "Selbst erstellte" Buttons nicht sichtbar. Java Basics - Anfänger-Themen 20
D Bei Event soll Instanz sich selbst löschen Java Basics - Anfänger-Themen 4
K Wieso schaltet meine CheckBox von selbst um ? Java Basics - Anfänger-Themen 31
F JOptionPane selbst programmieren Java Basics - Anfänger-Themen 8
E Eine Klasse hat eine Instanz von sich selbst. Java Basics - Anfänger-Themen 6
L vor- und zurückblättern selbst gemacht Java Basics - Anfänger-Themen 18
G Button selbst entwerfen Java Basics - Anfänger-Themen 9
G Mit "instanceof" sich selbst Fragen? Java Basics - Anfänger-Themen 4
G Array von selbst-definiertem Typ Java Basics - Anfänger-Themen 3
R Comparable Interface Funktionalität selbst programmieren? Java Basics - Anfänger-Themen 3
B Programm sich selbst neu starten lassen Java Basics - Anfänger-Themen 8
D Thread soll sich selbst beenden Java Basics - Anfänger-Themen 8
G Objektarray mit sich selbst rekombinieren Java Basics - Anfänger-Themen 5
B Objekt soll sich selbst löschen Java Basics - Anfänger-Themen 25
K Vector mit sich selbst vergleichen Java Basics - Anfänger-Themen 2
rambozola selbst definierte exception abfangen funzt nicht Java Basics - Anfänger-Themen 14
XWing Int erstellen lassen? Java Basics - Anfänger-Themen 11
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
A exe Datei erstellen Java Basics - Anfänger-Themen 8
J Packages erstellen Java Basics - Anfänger-Themen 7
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
C Gewinnspiel erstellen mit Algorithmus Java Basics - Anfänger-Themen 3
Ostkreuz Spielfeld Schatz erstellen Java Basics - Anfänger-Themen 5
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
T Objekte mit arrays erstellen Java Basics - Anfänger-Themen 6
B Klasse statisch erstellen da n-mal geladen Java Basics - Anfänger-Themen 3
laxla123 Dreieck erstellen Java Basics - Anfänger-Themen 1
XWing Random Punkte erstellen mit der Random klasse Java Basics - Anfänger-Themen 15
A Passwort erstellen Java Basics - Anfänger-Themen 3
S CVS erstellen Java Basics - Anfänger-Themen 1
RashAGhul Java Verwaltungstool Erstellen mit kaum Wissen Java Basics - Anfänger-Themen 9
K warum kann ich das Objekt nicht erstellen ? Java Basics - Anfänger-Themen 2
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
dennis_lnz Klassen Wie kann ich mein Java Textadventure verbessern, um ein Klassendiagramm zu erstellen? Java Basics - Anfänger-Themen 9
dcHost Java Kara Sensor erstellen Java Basics - Anfänger-Themen 1
JustAProgrammer Ein Dreieck mit Arrays erstellen Java Basics - Anfänger-Themen 2
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
U JList erstellen Java Basics - Anfänger-Themen 2
X Wie kann man ein Regex erstellen, die 8-Bit-Binär-Zahlen darstellen. Java Basics - Anfänger-Themen 1
httprt Probleme bei dem erstellen von leveln in meinem Spiel Java Basics - Anfänger-Themen 2
frager2345 Programm erstellen ohne Autoboxing und Unboxing Java Basics - Anfänger-Themen 13
berserkerdq2 IO Streams logfile erstellen und Sachen schreiben wie? Java Basics - Anfänger-Themen 2
B Teilprofil erstellen Java Basics - Anfänger-Themen 1
B Teilprofil erstellen Java Basics - Anfänger-Themen 1
I String Kombination erstellen anhand fortlaufender Zahl (Vertragsnummer) Java Basics - Anfänger-Themen 13
N 2D Array Summe erstellen Java Basics - Anfänger-Themen 6
T Log Funktion erstellen Java Basics - Anfänger-Themen 1
Dorfschmied Kartesisches Produkt von zwei Liste mit Hashmaps<String,String> erstellen Java Basics - Anfänger-Themen 4
S Programm erstellen Java Basics - Anfänger-Themen 3
S MinMax Programm erstellen Java Basics - Anfänger-Themen 4
S Mit for-Schleife ein 2D JLabel-Array mit veränderbaren Icons erstellen Java Basics - Anfänger-Themen 3
T Countdown erstellen Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben