TreePath mit String vergleichen

spinnerboy

Mitglied
Hallo!
In meinem aktuellen Programm habe ich einen JTree, der einen TreeSelectionListener besitzt.
Nun möchte ich gerne den Pfad
Code:
tree.getSelectionPath()
mit einem String vergleichen, um eine Methode aufzurufen.
Ich habe mir überlegt, dass es über eine if-Verzweigung, die den Pfad des JTrees ausliest und abgleicht funktionieren müsste.

Nun zu meinem Problem:
Wenn ich den Pfad der aktuellen Node zu Testzwecken auslese
Code:
System.out.println(tree.getSelectionPath());
erhalte ich den Output
Code:
[Medien, Bücher, Autor]
welcher ja auch völlig richtig ist!

Wenn ich aber nun

Java:
tree.addTreeSelectionListener(new TreeSelectionListener()
    {
      public void valueChanged(TreeSelectionEvent e)
      {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
        if (node == null) return;
        Object nodeInfo = node.getUserObject();

        if (node.isLeaf())
        {
          System.out.println(tree.getSelectionPath());
          if (tree.getSelectionPath().toString().equals("[Medien, Bücher, Autor]"))
          {
            System.out.println("1");
          }
          else if (tree.getSelectionPath().toString() == "[Medien, Bücher, Titel]")
          {
            System.out.println("2");
          }
          else if (tree.getSelectionPath().equals("[Medien, Bücher, Genre]"))
          {
            System.out.println("3");
          }
        }
      }
    }

als Listener verwende habe ich nun 3 Methoden den Pfad mit einem String zu vergleichen.
Bei mir liegen in der überliegenden Node "Bücher" (deren überliegende Node ist wiederum der Root "Medien") die Leaves "Autor", "Titel" und "Genre" vor.
Bei einem Klick auf "Autor" (im Programm) wird nur der Pfad ausgegeben, da ich ja
Code:
System.out.println(tree.getSelectionPath());
verwende bevor das Programm in die if-Verzweigung geht.
Was ich nun nicht verstehe ist, warum das Programm die "1" nicht auswirft.
Bei einem Klick auf Titel oder Genre ist es das gleiche, es werden wird weder die 2, noch die 3 ausgegeben.

Was mache ich falsch?
mfG spinner
 
Zuletzt bearbeitet:
System.out.println("String >>>"+tree.getSelectionPath().toString()+"<<<");
und dann mit dem Vergleichen, was zwischen den ">>>...<<<" ausgegeben wird, sollte gehen, aber IMHO ist dieses Vorgehen HÖCHST fragwürdig - man sollte sich NICHT darauf verlassen, dass eine toString-Repräsentation eines Objektes eine bestimmte Form hat. Tipp: Mach es anders - irgendwie...
 
Hi,

mir ist auch aufgefallen das du dir den "node" beschaffst und daraus das User-Objekt
"nodeInfo", später aber mit der String-Repräsentation arbeitest.
Wäre doch sinnvoller wenn du direkt mit dem User-Objekt arbeitest, oder?

User-Objekt: [c]Object nodeInfo = node.getUserObject();[/c]
 
System.out.println("String >>>"+tree.getSelectionPath().toString()+"<<<");
und dann mit dem Vergleichen, was zwischen den ">>>...<<<" ausgegeben wird

Genau das habe ich dch schon gemacht?
Output ist nach wie vor
Code:
[Medien, Bücher, Genre]
, nur noch mit den < und > außen rum!

Wäre doch sinnvoller wenn du direkt mit dem User-Objekt arbeitest, oder?

Wow, auf so was simples komm ich natürlich nicht 😵
Kannste mir trotzdem bitte erklären (evtl mit Beispiel?) wie ich das anwende?
Ich habe das bisherige nämlich nur aus der Klasse TreeDemo (Internettutorial), die ich nicht wirklich ganz verstehe, somit habe ich auch das Object nodeInfo nicht selbst erstellt.

mfG spinner
 
Java:
String s = tree.getSelectionPath().getLastComponent();
if (s.equals("Buch")) {
 // was auch immer
}
else if (s.equals("Autor")) {
  // was auch immer
}
der zwischen weg ist doch erstmal egal oder ?

Ansonsten ja.... erstell dir ein eigenes Objekt und gebe das deinem TreeNode mit, dann bekommst du beim getLastComponent() das Objekt wieder und kannst es in deins casten

zb
Java:
Buch buch = new Buch("Name", "Autor"); // was fuer ein Objekt auch immer
DefaultMutableTreeNode node = new DefaultMutableTreeNode(buch);
Buch theBuch = (Buch)node.getUserObject();
 
Java:
String s = tree.getSelectionPath().getLastComponent();

Wäre zwar auch ein Versuch, aber der Compiler sagt, dass es getLastComponent() nicht gibt
Java:
E:\myTunesX\myTunesX\Hauptfenster.java:217:45: error: cannot find symbol
String s = tree.getSelectionPath().getLastComponent();

symbol:   method getLastComponent()
location: class TreePath
 

Zurück
Oben