next up previous contents
Nächste Seite: Korallenwachstum Aufwärts: AWT / Swing Vorherige Seite: Baumstrukturen darstellen   Inhalt

Baumelemente auswählen

Der vollständige Pfad zu ausgewählten Baumelementen soll ermittelt und ausgegeben werden:


\includegraphics[width=3cm]{LosBaum3.ps}

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



Alfred Nussbaumer 2003-02-10