classcastexeption in JTree (XML)

  • In der fettgedruckten Zeile kommt die unten genannte Fehlermeldung.
    Das Ganze ist Teil eines JTrees, der ein DOMobjekt darstellt. Es soll also der Inhalt einer XML-Datei in einem JTree angezeigt werden.

    public void valueChanged(TreeSelectionEvent e) {
    DefaultMutableTreeNode node = (DefaultMutableTreeNode)
    tree.getLastSelectedPathComponent();

    if (node == null) return;
    Object nodeInfo = node.getUserObject();
    if (node.isLeaf()) {
    DependencyInfo dependency = (DependencyInfo)nodeInfo;
    } if (DEBUG) {
    System.out.println(nodeInfo.toString());
    }
    }

    Folgende Fehlermeldung kommt:
    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: gui.Tree$AdapterNode
    at gui.Tree.valueChanged(Tree.java:82)
    at javax.swing.JTree.fireValueChanged(Unknown Source)

  • Wenn die Komponenten des JTree sicher alle DefaultMutableTreeNode Objekte sind dann könnte es daran liegen, dass kein Node selektiert worden ist. Eine Überprüfung ob es eine Selektion im Tree gibt könnte das Problem beheben.

    Code
    if (!tree.isSelectionEmpty()) {
        // hier deinen Code einfuegen
    }
  • Jetzt habe ich noch folgendes vor:
    Der JTree ist ja eine XML Datei, Zweige darin sind wiederum XML-Dateien.
    Um Änderungen und Aktivitäten des Nutzers nachzuvollziehen, will ich noch einen Zeitstempel einbaun. Man soll ihn auch im Tree sehen.

    Wie geht das? Und kann mans machen, dass diese Datums-/Zeitangabe-immer im JTree mitdrinsteht...hinter dem ausgeklappten Ast, am Namen dran(?) z.B. einfach irgendwie als Textnode, dort statt "Text" eine "Timestamp-Methode"?!

  • Jeder Knoten in einem JTree enthält ein Objekt (User Object). Der Text in diesem Knoten ist der Rückgabewert der toString Methode dieses Objekts.

    Möchtest du also die Ausgabe verändern musst du die toString-Methode entsprechend anpassen. Falls du diese Methode der Klasse X nicht ändern kannst wäre eine Möglichkeit eine Klasse Y zu schreiben die von der Klasse X erbt und die toString Methode überschreibt.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!