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("");
}
}