Class CheckBoxTree

  • All Implemented Interfaces:
    java.awt.event.MouseListener, java.awt.event.MouseMotionListener, java.awt.event.MouseWheelListener, java.util.EventListener, javax.swing.event.TreeSelectionListener

    public class CheckBoxTree
    extends java.awt.event.MouseAdapter
    implements javax.swing.event.TreeSelectionListener
    CheckBoxTree dekoriert einen JTree mit je einer JCheckBox pro Knoten bzw. Blatt. Dabei übernimmt CheckBoxTree den Renderer der Original-JTree-Objekts und gegebenenfalls auch einen Editor. Das Interface CheckBoxListener dient dazu, bei Zustandsänderung einer JCheckBox registrierte Listener davon zu unterrichten.

    CheckBoxTree basiert der Idee und zum Teil auch dem Code nach auf einem Artikel von Santhosh Kumar Tekuri, vgl. http://www.jroller.com/page/santhosh/20050610. Dieser Code wurde später von seinem Autor unter LGPL 2.1 oder höher (nach Wahl des Benutzers) lizensiert. CheckBoxTree heißt dort CheckTreeManager. Dort wurde nur der Renderer 'gewrapped'. Statt dem dort verwendeten, komplexen Selektions-Model für die Zustände der Check-Boxen, welches mit einer 3-Zustände-Check-Box interagiert, kommt hier ein DefaultTreeSelectionModel zum Einsatz.

    Anwendung: eine typische Anwendung besteht aus ein bis vier Zeilen Code:

                  CheckTreeManager manager = new CheckTreeManager(tree, aCheckBoxInitializer);
                  manager.setLeafsOnly(true);
                  manager.suppressIcons();
                  manager.addCheckBoxListener(aListener);
      
    Da der CheckBoxTree keine Component ist, wird nicht er, sondern der dekorierte JTree in Container gesteckt.

    Einschränkungen: (1) Im Konstruktor von CheckBoxTree wird der TreeCellRenderer und gegebenfalls der TreeCellEditor des übergebenen JTrees durch einen speziellen Wrapper-Renderer und eine speziellen Wrapper-Editor ersetzt, die gewisse Aufgaben selber übernehmen, aber andere an ihre Vorgänger deliegieren. Dementsprechend sind die Methoden JTree.setCellRenderer und JTree.setCellEditor nach dem Konstruktor-Aufruf tabu. (2) Der Original-Renderer des übergebenen JTrees sollte - um vollen Funktionsunfang zu haben - ein DefaultTreeCellRenderer sein oder einer Subklasse davon angehören (s. ignoreIcons). (3) Eine ähnliche Einschränkung gilt für das TableModel des JTrees: ist dies ein DefaultTableModel oder davon abgeleitet, so wird der Knoten aktualisiert, wenn seine Check-Box betätigt wird (s. DefaultTableModel.reload(TreeNode)). Dadurch wird eine eventuell vorhandene Veränderung der Darstellung automatisch durchgeführt.

    Besonderheit: CheckBoxTree bietet dem Benutzer die Möglichkeit, jederzeit die Checkboxen erneut zu initialisieren. Hierzu wird reinitializeCheckBoxes aufgerufen. Diese Methode benutzt den im Konstruktor angegebenen Initialisierer. Damit steht dem Benutzer auch programmatisch die Möglichlkeit zu, die CheckBoxen nach der Konstruktion zu steuern.

    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void addCheckBoxListener​(de.bsvrz.pat.sysbed.dataview.filtering.CheckBoxTree.CheckBoxListener l)
      Registriert einen CheckBoxListener.
      void mousePressed​(java.awt.event.MouseEvent e)
      Während das Selektionsverhalten dem JTree überlassen bleibt, wird das Betätigen der Check-Boxen hier im MouseListener abgearbeitet.
      void reinitializeCheckBoxes()
      Diese Methode dient dazu, die CheckBoxen zu jeden beliebeigen Zeitpunkt neu initialisieren zu können.
      boolean removeCheckBoxListener​(de.bsvrz.pat.sysbed.dataview.filtering.CheckBoxTree.CheckBoxListener l)
      De-registriert einen CheckBoxListener und gibt im Erfolgsfall true zurück.
      void setLeafsOnly​(boolean leafsOnly)
      Im Defaultzustand wird jeder Knoten mit einer JCheckBox dekoriert.
      void suppressIcons()
      Nach dem Ausführen dieser Methode werden die üblichen Icons (für geöffnete und geschlossene Knoten, sowie Blätter) unterdrückt.
      java.lang.String toString()  
      void valueChanged​(javax.swing.event.TreeSelectionEvent e)  
      • Methods inherited from class java.awt.event.MouseAdapter

        mouseClicked, mouseDragged, mouseEntered, mouseExited, mouseMoved, mouseReleased, mouseWheelMoved
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • CheckBoxTree

        public CheckBoxTree​(javax.swing.JTree tree,
                            @Nullable
                            CheckBoxTree.CheckBoxInitializer initializer)
        Der Konstruktor. Er benötigt einen JTree und ihm kann auch ein CheckBoxInitializer mitgegeben werden. Geschieht dies nicht, so werden alle Check-Boxen unselektiert initialisiert.
        Parameters:
        tree - ein JTree
        initializer - ein CheckBoxInitializer oder null
    • Method Detail

      • reinitializeCheckBoxes

        public void reinitializeCheckBoxes()
        Diese Methode dient dazu, die CheckBoxen zu jeden beliebeigen Zeitpunkt neu initialisieren zu können.
      • setLeafsOnly

        public void setLeafsOnly​(boolean leafsOnly)
        Im Defaultzustand wird jeder Knoten mit einer JCheckBox dekoriert. Mit dieser Methode kann man dies auf alle Blätter einschränken und auch wieder rückgängig machen.
        Parameters:
        leafsOnly - ein Boolean
      • suppressIcons

        public void suppressIcons()
        Nach dem Ausführen dieser Methode werden die üblichen Icons (für geöffnete und geschlossene Knoten, sowie Blätter) unterdrückt. Diese Funktionalität steht nur für dann zur Verfügung, wenn der Original-Renderer ein DefaultTreeCellRenderer ist.
      • addCheckBoxListener

        public void addCheckBoxListener​(de.bsvrz.pat.sysbed.dataview.filtering.CheckBoxTree.CheckBoxListener l)
        Registriert einen CheckBoxListener.
        Parameters:
        l - ein Listener
      • removeCheckBoxListener

        public boolean removeCheckBoxListener​(de.bsvrz.pat.sysbed.dataview.filtering.CheckBoxTree.CheckBoxListener l)
        De-registriert einen CheckBoxListener und gibt im Erfolgsfall true zurück.
        Parameters:
        l - ein Listener
        Returns:
        der Erfolgswert
      • mousePressed

        public void mousePressed​(java.awt.event.MouseEvent e)
        Während das Selektionsverhalten dem JTree überlassen bleibt, wird das Betätigen der Check-Boxen hier im MouseListener abgearbeitet.
        Specified by:
        mousePressed in interface java.awt.event.MouseListener
        Overrides:
        mousePressed in class java.awt.event.MouseAdapter
        Parameters:
        e - ein Maus-Event
      • valueChanged

        public void valueChanged​(javax.swing.event.TreeSelectionEvent e)
        Specified by:
        valueChanged in interface javax.swing.event.TreeSelectionListener
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object