Der vollständige Pfad zu ausgewählten Baumelementen soll ermittelt und ausgegeben werden:
import java.awt.*; import java.awt.event.*; import java.applet.*; import javax.swing.*; import javax.swing.tree.*; import javax.swing.event.*; public class Baum3 extends JApplet { JTree baum; JTextField ausgabe; public void init() { int astzahl = 2; int zweigezahl = 4; int blattzahl = 7; Container anzeige = getContentPane(); anzeige.setLayout(new BorderLayout()); DefaultMutableTreeNode wurzel = new DefaultMutableTreeNode("Wurzel"); for (int i = 1; i<=astzahl; i++) { DefaultMutableTreeNode ast = new DefaultMutableTreeNode("Ast" + i); wurzel.add(ast); for (int j = 1; j<=zweigezahl; j++) { DefaultMutableTreeNode zweig = new DefaultMutableTreeNode("Zweig" + i + j); ast.add(zweig); for (int k = 1; k<=blattzahl; k++) { zweig.add(new DefaultMutableTreeNode("Blatt" + i + j + k)); } } } baum = new JTree (wurzel); baum.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() { public void valueChanged(TreeSelectionEvent tse) { TreePath pfad = tse.getNewLeadSelectionPath(); ausgabe.setText(pfad.toString()); } }); JScrollPane scrollbaum = new JScrollPane(baum); anzeige.add(scrollbaum, BorderLayout.CENTER); ausgabe = new JTextField("", 30); anzeige.add(ausgabe, BorderLayout.SOUTH); } }
Zu beachten ist die anonyme innere Klasse TreeSelectionListener zur Behandlung der ausgewählten Baumelemente: Ihre Methode valueChanged ruft die Methode getNewLeadSelectionPath() des TreeSelectionEvent-Ereignisses auf. Ihr Ergebnis wird nach der Konversion mittels toString() im Textfeld ausgegeben.
Als Variante kann auch ein MouseListener an das Baumobjekt gebunden werden:
... public voit init() { .... baum.addMouseListener (new MouseAdapter() { public void mouseClicked(MouseEvent me) { wahlanzeigen(me); } }); .... } void wahlanzeigen (MouseEvent me) { TreePath pfad = baum.getPathForLocation(me.getX(), me.getY()); if (pfad != null) ausgabe.setText(pfad.toString()); else ausgabe.setText(""); } }