seltsames Problem mit TreeNodes
-
Hi,
ich verwende DefaultMutableTreeNodes für den JTree. Zur Verwaltung der Inhalte dieser Nodes verwende ich eine simple Klasse namens NodeContent.
Im Konstruktor habe ich einen root-Node erzeugt:
topNode = new DefaultMutableTreeNode(new NodeContent("XML-Dokumente")); tModel = new DefaultTreeModel(topNode); jTree1.setModel(tModel);
mittels folg. Codes füge ich einen neue XML-Datei zum topNode hinzu:
private void jMenuItemOpenActionPerformed(java.awt.event.ActionEvent evt) { JFileChooser chooser = new JFileChooser(); if(chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION){ file = chooser.getSelectedFile(); DefaultMutableTreeNode node = new DefaultMutableTreeNode(new NodeContent(file.getName()) ); topNode.add(node); //XMLParserTreeNodes liest eine XML-Datei ein und fügt die resultierende Struktur aus //DefaultMutableTreeNodes dem angegebenen node hinzu. Der Zeiger node könnte dadurch verändert werden! new XMLParserTreeNodes(node, file); //Zeiger node ab hier nicht mehr verwenden!!! jTree1.repaint(); System.out.println("Oeffnen OK: "+ file.getName()); } }
Nun das seltsame:
Wenn ich bei der Ausführung eine XML-Datei öffne und dann gleich noch eine öffne, ohne im Tree vorher rumgeklickt oder "gebrowst" zu haben, dann ist die resultierende Struktur so, wie gewollt. Bsp.:
XML-Dokumente |_ Wetter.xml |_ Hotels.xml
wenn ich jedoch erst z.B. Wetter.xml öffne, darin dann Sub-Knoten öffne und danach eine weitere XML-Datei öffne (Hotel.xml), so wird diese nicht mehr im Tree angezeigt:
XML-Dokumente |_ Wetter.xml |_ Datum |_ Daten
Die legt die Vermutung nahe, dass der Zeiger topNode während des "browsens" verändert wurde. Zum Browsen durch die Struktur verwende ich folgenden Code...man sieht: Der Zeiger topNode wird hier eigentlich nicht verändert.
private void jTree1ValueChanged(javax.swing.event.TreeSelectionEvent evt) { currNode = (DefaultMutableTreeNode)jTree1.getLastSelectedPathComponent(); if(currNode != null) currNodeContent = (NodeContent)currNode.getUserObject(); else return; if(currNodeContent != null){ jTextArea1.setText(currNodeContent.nodeType +" "+ currNodeContent.getType() + " " + currNodeContent.getName() +"\n" +currNodeContent.getText()); } jTextArea1.repaint(); }
Worin kann sich dieses Verhalten also begründen?
Vielen Dank schonmal.
-
Versuch es mal mit einem reload auf das Model vor dem repaint.
-
Vielen Dank.
Hat super funktioniert.