Node neben dem Expand/Collapse Symbol ermitteln

Status
Nicht offen für weitere Antworten.

HinselNova

Mitglied
Hallo,

ich habe folgendes Problem:

Habe mir so eine Art Explorer mit einem JTree gebastelt. Mit valueChanged des SelectionListener fülle ich meine folgenden Nodes zwei Stufen tief auf, damit das Expand/Collapse Symbol korrekt dargestellt wird. Beispiel wenn ich auf
c:\ klicke , listet er mir alle Verzeichnisse von c: auf und hat von diesen wiederrum alle Unterverzeichnisse. Das funktioniert soweit auch alles perfekt. Das Problem ist aber wenn ich eine Node über das Expand/Collapse Symbol aufklappe ist
Code:
DefaultMutableTreeNode node = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
immer null. Also habe ich noch den TreeWillExpandListener implementiert. Wie kann ich nun bei
Code:
public void treeWillExpand()
die zu dem Symbol gehörige Node ermitteln? Wenn ich mit
Code:
TreePath path = tree.getAnchorSelectionPath()
arbeite ist dieser path auch immer null.

Ich hoffe das war jetzt nicht zu wirr.
Schonmal ein dickes Danke.
 
B

Beni

Gast
Der Listener bekommt doch ein "TreeExpansionEvent", in diesem Event gibts einen TreePath, und der führt wohl zu dem Node, der expandieren wird.

Code:
public void treeWillExpand( TreeExpansionEvent e ){
  Object node = e.getPath().getLastPathComponent();
  ...
 

HinselNova

Mitglied
Vielen Dank für die schnelle Antwort. Seltsamerweise läuft mein 2 Stufen Scan nur wenn ich auf eine Node doppelklicke. Obwohl ich die Methode über treeWillExpand mit den gleichen Parametern aufrufe. Ich verstehe es nicht.
Woran könnte das liegen?
Code:
tree.addTreeWillExpandListener(new TreeWillExpandListener(){
            	public void treeWillExpand(TreeExpansionEvent e){
            		DefaultMutableTreeNode node = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
                    if(node != null){
                    	TreeObject t = (TreeObject)node.getUserObject();
                    	System.out.println("if: "+t.getFile());
                        node.removeAllChildren();
                        getData(node,t.getFile());
                    }else{
                    	DefaultMutableTreeNode node2 = (DefaultMutableTreeNode)e.getPath().getLastPathComponent();
                    	TreeObject t2 = (TreeObject)node2.getUserObject();
                    	System.out.println("else: "+t2.getFile());
                    	getData(node2,t2.getFile());
                    }
            	}
            	public void treeWillCollapse(TreeExpansionEvent e){
            		System.out.println("collapse");
            	}
            });
        }
        return tree;
    }
    
    public void getData(DefaultMutableTreeNode n, File f)
    {
        File [] templist = f.listFiles();
        if(templist == null || n.getChildCount() != 0){
            return;
        }else{
            for(int i=0;i<templist.length;i++){
                if(templist[i].isDirectory() == true){
                    TreeObject temp2 = new TreeObject(templist[i].getName(),templist[i]);
                    DefaultMutableTreeNode child = new DefaultMutableTreeNode(temp2);
                    n.add(child);
                    getDataLevel2(child,temp2.getFile());
                }
            }
        }
    }
    
    public void getDataLevel2(DefaultMutableTreeNode nl, File f)
    {
        File [] templist2 = f.listFiles();
        if(templist2 == null){
            return;
        }else{
            for(int i=0;i<templist2.length;i++){
            	if(templist2[i].isDirectory() == true){
            		TreeObject temp3 = new TreeObject(templist2[i].getName(),templist2[i]);
                    DefaultMutableTreeNode child2 = new DefaultMutableTreeNode(temp3);
                    nl.add(child2);
                }
            }
        }
        
    }
 
B

Beni

Gast
Wenn du auf den Node doppelklickst, selektierst du ihn auch gleichzeitig. Da hat der Tree einen anderen Status, als wenn du nur auf das + -Icon klickst.

Wieso willst du überhaupt dieses "getLastSelectedPathComponent" nutzen? Was ist mit dem dem Pfad vom "TreeExpansionEvent" nicht in Ordnung?
 
G

Guest

Gast
Gute Frage. Wenn ich auf das +- Symbol klicke., füllt er meine folgenden Nodes nicht auf. Warum das aber so ist weiß ich nicht. Ich vermute das wenn ich einen Node über das +- Symbol expandiere das Auffüllen quasi "hinter" dem expandieren geschieht. Gibt es eine Möglichkeit den Tree nach dem Expandieren über das +- Symbol abzudaten?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S JavaFX Java Custom Node Grafik zurückgeben AWT, Swing, JavaFX & SWT 2
J Resize Node im BorderPane AWT, Swing, JavaFX & SWT 7
L DragDropped für jede Node AWT, Swing, JavaFX & SWT 0
S JavaFX Node soll auch nach Skalierung zentriert platziert sein AWT, Swing, JavaFX & SWT 3
RalleYTN Modaler Dialog und JTree Node mit sehr... seeeeehr vielen Elementen AWT, Swing, JavaFX & SWT 6
L JavaFX Node wird nicht korrekt angezeigt AWT, Swing, JavaFX & SWT 7
A Swing Problem beim Neuerstellen einer Node AWT, Swing, JavaFX & SWT 4
T SWT Warum ist mein 1.Tree Node selektiert? AWT, Swing, JavaFX & SWT 11
D JTree node reagiert bei Klick nicht immer AWT, Swing, JavaFX & SWT 2
D Mehrmals auf Node im JTree klicken AWT, Swing, JavaFX & SWT 2
S Swing JTree Node Text nicht richtig angezeigt AWT, Swing, JavaFX & SWT 2
Rudolf Swing JTree Node anhand vom Namen finden AWT, Swing, JavaFX & SWT 4
D Drag & Drop - node.isRoot AWT, Swing, JavaFX & SWT 3
C Swing MouseEntered(?) für jeden Node im JTree AWT, Swing, JavaFX & SWT 4
H JTree Node mit Text plus JComboBox AWT, Swing, JavaFX & SWT 10
R JTree root Node AWT, Swing, JavaFX & SWT 2
N JTree node unselectable AWT, Swing, JavaFX & SWT 6
A Swing JTree Tree Node löschen AWT, Swing, JavaFX & SWT 2
C JTree per code selektierte Node wird nicht farbig hinterlegt AWT, Swing, JavaFX & SWT 2
S JTree rendern der Knoten [+] und [-], nicht der Node Icons AWT, Swing, JavaFX & SWT 2
G JTree Node ggf. aufklappen bei Drag & Drop? AWT, Swing, JavaFX & SWT 7
O JTree Node sofort editieren AWT, Swing, JavaFX & SWT 2
J [JTree] Node updaten AWT, Swing, JavaFX & SWT 3
I JTree Node Name ändern AWT, Swing, JavaFX & SWT 2
T new JTree(node) wie node ändern AWT, Swing, JavaFX & SWT 3
W Node aus JTree löschen AWT, Swing, JavaFX & SWT 2
G JTree -- Node nach ändern in anderen Knoten AWT, Swing, JavaFX & SWT 15
P ID einer ausgewaehlten Node aus JTree ermitteln AWT, Swing, JavaFX & SWT 6
J JTree / delete node AWT, Swing, JavaFX & SWT 2
R JTree: Zeilenumbruch in Node AWT, Swing, JavaFX & SWT 6
F JTree Letzte Node auswählen AWT, Swing, JavaFX & SWT 8
S [JTree] mehrmals auf den selben Node klicken AWT, Swing, JavaFX & SWT 11
K jtree: nur "first node" in anderer hintergrundfarb AWT, Swing, JavaFX & SWT 4
EagleEye JTree Node löschen Problem AWT, Swing, JavaFX & SWT 4
A JTree nach Node durchsuchen und expanden AWT, Swing, JavaFX & SWT 5
G jtree (node, child) AWT, Swing, JavaFX & SWT 3
A JTree Node Text ändern AWT, Swing, JavaFX & SWT 5
F Icons neben Text in Listview setzen AWT, Swing, JavaFX & SWT 2
K SplashScreen neben JFrame behalten AWT, Swing, JavaFX & SWT 10
H Swing JTabbedPane: Zusätzliche Buttons neben den Tabs AWT, Swing, JavaFX & SWT 7
V JavaFX - fxml-Datei laden (neben CSS) AWT, Swing, JavaFX & SWT 2
FoolMoon Swing JCheckBox neben Text in einer Tabelle AWT, Swing, JavaFX & SWT 2
S JTree Expand(-) und Collapse(+) neben Icon AWT, Swing, JavaFX & SWT 3
O icon neben der Uhr unten AWT, Swing, JavaFX & SWT 8
T Expand/Collape JSplitPane programmatically AWT, Swing, JavaFX & SWT 3
C JTree expand zu einem Pfad bei Programmstart AWT, Swing, JavaFX & SWT 6
G Tree und expand eines bekannten Pfades AWT, Swing, JavaFX & SWT 5
W SWT - Tree: Problem mit Double-Click expand AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben