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.
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceCheckBoxTree.CheckBoxInitializer -
Constructor Summary
Constructors Constructor Description CheckBoxTree(javax.swing.JTree tree, CheckBoxTree.CheckBoxInitializer initializer)Der Konstruktor. -
Method Summary
Modifier and Type Method Description voidaddCheckBoxListener(de.bsvrz.pat.sysbed.dataview.filtering.CheckBoxTree.CheckBoxListener l)Registriert einenCheckBoxListener.voidmousePressed(java.awt.event.MouseEvent e)Während das Selektionsverhalten demJTreeüberlassen bleibt, wird das Betätigen der Check-Boxen hier im MouseListener abgearbeitet.voidreinitializeCheckBoxes()Diese Methode dient dazu, die CheckBoxen zu jeden beliebeigen Zeitpunkt neu initialisieren zu können.booleanremoveCheckBoxListener(de.bsvrz.pat.sysbed.dataview.filtering.CheckBoxTree.CheckBoxListener l)De-registriert einenCheckBoxListenerund gibt im Erfolgsfalltruezurück.voidsetLeafsOnly(boolean leafsOnly)Im Defaultzustand wird jeder Knoten mit einerJCheckBoxdekoriert.voidsuppressIcons()Nach dem Ausführen dieser Methode werden die üblichen Icons (für geöffnete und geschlossene Knoten, sowie Blätter) unterdrückt.java.lang.StringtoString()voidvalueChanged(javax.swing.event.TreeSelectionEvent e)Methods inherited from class java.awt.event.MouseAdapter
mouseClicked, mouseDragged, mouseEntered, mouseExited, mouseMoved, mouseReleased, mouseWheelMovedMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Constructor Details
-
CheckBoxTree
public CheckBoxTree(javax.swing.JTree tree, @Nullable CheckBoxTree.CheckBoxInitializer initializer)Der Konstruktor. Er benötigt einenJTreeund ihm kann auch einCheckBoxInitializermitgegeben werden. Geschieht dies nicht, so werden alle Check-Boxen unselektiert initialisiert.- Parameters:
tree- ein JTreeinitializer- ein CheckBoxInitializer odernull
-
-
Method Details
-
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 einerJCheckBoxdekoriert. 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 einDefaultTreeCellRendererist. -
addCheckBoxListener
public void addCheckBoxListener(de.bsvrz.pat.sysbed.dataview.filtering.CheckBoxTree.CheckBoxListener l)Registriert einenCheckBoxListener.- Parameters:
l- ein Listener
-
removeCheckBoxListener
public boolean removeCheckBoxListener(de.bsvrz.pat.sysbed.dataview.filtering.CheckBoxTree.CheckBoxListener l)De-registriert einenCheckBoxListenerund gibt im Erfolgsfalltruezurück.- Parameters:
l- ein Listener- Returns:
- der Erfolgswert
-
mousePressed
public void mousePressed(java.awt.event.MouseEvent e)Während das Selektionsverhalten demJTreeüberlassen bleibt, wird das Betätigen der Check-Boxen hier im MouseListener abgearbeitet.- Specified by:
mousePressedin interfacejava.awt.event.MouseListener- Overrides:
mousePressedin classjava.awt.event.MouseAdapter- Parameters:
e- ein Maus-Event
-
valueChanged
public void valueChanged(javax.swing.event.TreeSelectionEvent e)- Specified by:
valueChangedin interfacejavax.swing.event.TreeSelectionListener
-
toString
public java.lang.String toString()- Overrides:
toStringin classjava.lang.Object
-