Swing Jtree

erdmulch

Bekanntes Mitglied
Hallo,

Kann mir jemand erklären, wie ich nur den letzten Pfad des Verzeichnisbaumes auslesen kann?
ich hab schon gegoogelt. jedoch ohne erfolg! :)

als Ausgabe sollte nur:
C:/Desktop/Java/xxx.doc

anstatt
C:/Desktop/Java
C:/Desktop/Java/xxx.doc

erscheinen

danke im voraus

erdmulch




import java.io.*;

import java.awt.*;
import java.awt.event.FocusEvent;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.filechooser.*;
import javax.swing.tree.*;

public class FileTreeTest extends JTree
{
public static void main( String[] args )
{
JFrame frame = new JFrame("JTree-Test");
frame.getContentPane().add( new JScrollPane( new FileTreeTest() ) );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible( true );




}

private static FileSystemView SYSTEM = FileSystemView.getFileSystemView();

public FileTreeTest()
{
setModel( new FileTreeModel() );
setCellRenderer( new FileTreeCellRenderer() );
}

private class FileTreeCellRenderer extends DefaultTreeCellRenderer
{
public FileTreeCellRenderer()
{

}

public Component getTreeCellRendererComponent( JTree tree, Object value, boolean sel, boolean exp, boolean leaf, int row, boolean focus ){
super.getTreeCellRendererComponent( tree, value, sel, exp, leaf, row, focus );

File file = (File)value;

setIcon( SYSTEM.getSystemIcon( file ) );
setText( SYSTEM.getSystemDisplayName( file ));

return this;
}
}

private class FileTreeModel implements TreeModel
{
public FileTreeModel()
{

}

public Object getRoot()
{
return SYSTEM.getHomeDirectory(); // <<<<<<<<<<<<<<<<<<<<<<< Der ist wichtig
}

public int getChildCount(Object parent)
{
return SYSTEM.getFiles( (File) parent, true).length;
}

public boolean isLeaf(Object node)
{

System.out.println(node);
return ( (File) node).isFile();

}

public void addTreeModelListener(TreeModelListener l)
{

}

public void removeTreeModelListener(TreeModelListener l)
{

}

public Object getChild(Object parent, int index)
{
return SYSTEM.getFiles( (File) parent, true)[ index];
}

public int getIndexOfChild(Object parent, Object child)
{
File[] files = SYSTEM.getFiles( (File) parent, true);

for (int i = 0; i < files.length; i++)
if (files == child)
return i;

return -1;


}

public void valueForPathChanged(TreePath path, Object newValue)
{

}



}
}
 

dku

Mitglied
Wenn es dir nur um die Konsolenausgabe geht :)

Java:
if(((File)node).isFile()) {
    System.out.println(node);
}

So gibt dein Model ja auch vor, dass ein ein Knoten ein Ordner ist und ein Blatt eine Datei.

Oder habe ich jetzt auf die schnelle was übersehen? :)

Viele Grüße,
David
 

dku

Mitglied
Dann musst du am jTree einen entsprechenden Listener (TreeSelectionListener z.b.) registrieren um auf die Auswahl-Änderungen reagieren zu können und dort dann auslesen was grade angewählt ist.

z.b. so
Java:
        File f = (File)jTree.getSelectionPath().getLastPathComponent();
        System.out.println(f.getPath());
 

erdmulch

Bekanntes Mitglied
ich glaub wir schreiben aneinander vorbei
ich versuch es nochmals zu erklären
und zwar sieht man Jtree so aus:

Code:
Ordner1
    |
Ordner2
    |
Ordner3 - Unterordner3.1
                     |
              Unterordner3.2 - File3.2.1
nun will ich dass in System.out.println()
folgendes ausgegeben wird:
Ordner3/Unterordner3.2/File3.2.1

brauch ich dazu noch einen extra Listener? Wenn ja wo muss ich ihn im Programm einfügen?

danke im vorraus...
 
Zuletzt bearbeitet:

dku

Mitglied
ich hoffe ich habe Verstanden was du vor hast:

Habe mir deinen Code mal in Netbeans gezogen.

Dein System.out.println ist an einer recht unglücklichen Stelle dafür untergebracht, da die isLeaf Methode immer aufgerufen wird um zu bestimmen, ob es sich in deinem Fall um einen Ordner oder um eine Datei handelt.

Wenn ich dich richtig verstehe möchtest du, wenn du ein Element im Tree auswählst den Pfad davon anzeigen lassen.
Das würde dann so passieren:

jTree1 sei dein jTree

Java:
        jTree1.addTreeSelectionListener(new TreeSelectionListener() {

            public void valueChanged(TreeSelectionEvent tse) {
                Object lastPathComponent = jTree1.getSelectionPath().getLastPathComponent();
                File f = (File)lastPathComponent;
                System.out.println(f.getPath());
            }
        });

Wenn du _nur_ Pfade zu Dateien anzeigen lassen willst einfach vorher prüfen, ob es eine Datei ist.


Java:
        jTree1.addTreeSelectionListener(new TreeSelectionListener() {

            public void valueChanged(TreeSelectionEvent tse) {
                Object lastPathComponent = jTree1.getSelectionPath().getLastPathComponent();
                File f = (File)lastPathComponent;
                if(f.isFile()){  
                System.out.println(f.getPath());
                }
            }
        });


Das System.out.println Statement in der isLead Methode würde ich einmal rauswerfen :)

Viele Grüße,
David
 

dku

Mitglied
ich habe deine main Methode ignoriert. Die ganze Struktur ist vielleicht auch eher etwas unglücklich - zumindest wenn du das ganze irgendwann weiterverwenden willst als Element einer GUI.

Wenn du den Listener in deiner Struktur unterbringen willst, musst du das in deiner main Methode tun.

Java:
public static void main( String[] args )
{
JFrame frame = new JFrame("JTree-Test");
final FileTreeTest fileTreeTest = new FileTreeTest();
frame.getContentPane().add( new JScrollPane( fileTreeTest ) );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.pack();

fileTreeTest.addTreeSelectionListener(new TreeSelectionListener() {
 
            public void valueChanged(TreeSelectionEvent tse) {
                Object lastPathComponent = fileTreeTest.getSelectionPath().getLastPathComponent();
                File f = (File)lastPathComponent;
                if(f.isFile()){  
                System.out.println(f.getPath());
                }
            }
        });

frame.setLocationRelativeTo( null );
frame.setVisible( true );




}
 
S

SlaterB

Gast
besteht eine Frage?
ein Update mit aktuellen Code + Problemen wäre vielleicht nützlich,
und bitte JAVA-Tags verwenden
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Bananabert Swing jtree : image als user object Allgemeine Java-Themen 2
F JTree: Nodes dynamisch anlegen via LinkedHashMap Allgemeine Java-Themen 2
R JTree - Mehrere Roots Allgemeine Java-Themen 6
DStrohma Icons in JTree Nodes weiter nach rechts rücken Allgemeine Java-Themen 2
M JTree aktualisieren nach Mausklick Allgemeine Java-Themen 12
DStrohma Jede node in JTree mit eigenem Icon Allgemeine Java-Themen 7
Benji0815 Verzeichnis wie im Windows Explorer in einem JTree anzeigen Allgemeine Java-Themen 6
S JAVA JTree rekursiv umschreiben Allgemeine Java-Themen 5
S Suche im JTree nach Neuaufbau Allgemeine Java-Themen 4
N JTree nicht genutzte Pfade schließen Allgemeine Java-Themen 2
G JTree Node löschen Allgemeine Java-Themen 2
G JTree Node verschieben Allgemeine Java-Themen 2
MQue leerer JTree Allgemeine Java-Themen 6
MQue JTree Allgemeine Java-Themen 6
MQue JCheckBox in JTree Allgemeine Java-Themen 2
F JTree in Jsp Allgemeine Java-Themen 2
T Äquivalent zu JTree Allgemeine Java-Themen 4
C JTree: ActionListener auf die Nodes Allgemeine Java-Themen 3
M JTree mit Rechtsklick markieren Allgemeine Java-Themen 4
C JTree: Nodes automatisch öffnen Allgemeine Java-Themen 2
P JTree/ Nodes einfügen Allgemeine Java-Themen 2
P JTree Allgemeine Java-Themen 6
P aus JTree eine XML- Datei Allgemeine Java-Themen 6
P Vector auf JTree Allgemeine Java-Themen 6
P JTree Farbe Allgemeine Java-Themen 14
S JTree selektion erkennen und drauf reagieren Allgemeine Java-Themen 2
E JTree (schonwieder) - TreeCellEditor Allgemeine Java-Themen 9
E JTree - einzelnes Element (Knoten) editieren Allgemeine Java-Themen 2
E JTree - Selektieren mit Rechtsklick Allgemeine Java-Themen 15
P JTree ID vergeben Allgemeine Java-Themen 3
P JTree Allgemeine Java-Themen 4
P JTree/ JTabbedPane Allgemeine Java-Themen 34
L JTree Allgemeine Java-Themen 23
E root JTree Allgemeine Java-Themen 2
E Child in JTree hinzufügen Allgemeine Java-Themen 4
E JTree in NetBeans Allgemeine Java-Themen 2
R Objekt an Knoten von JTree anhaengen Allgemeine Java-Themen 2
R Daten aus Baum entsprechend in jTree einfuegen Allgemeine Java-Themen 2
T Jtree zu langsam beim klappen Allgemeine Java-Themen 8
S JTree - Brett vor'm Kopp Allgemeine Java-Themen 19
G Baumhierarchie in JTree eintragen Allgemeine Java-Themen 4
K JTree - Knoten expandieren Allgemeine Java-Themen 4
K JTree Inhalt löschen und Anzeige aktualisieren Allgemeine Java-Themen 13
G JTree automatisch sortieren lassen Allgemeine Java-Themen 5
Luma Diskettenlaufwerk rattert los bei Eintrag in JTree Allgemeine Java-Themen 6
G in Jtree suchen Allgemeine Java-Themen 2
K JTree plus eigener FileLoader Allgemeine Java-Themen 2
H Wie stellt ein JTree fest, wo etwas eingehängt werden soll? Allgemeine Java-Themen 2

Ähnliche Java Themen


Oben