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.


Anmelden zum Antworten