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.
Modifier and Type | Class | Description |
---|---|---|
static interface |
CheckBoxTree.CheckBoxInitializer |
Constructor | Description |
---|---|
CheckBoxTree(javax.swing.JTree tree,
CheckBoxTree.CheckBoxInitializer initializer) |
Der Konstruktor.
|
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) |
public CheckBoxTree(javax.swing.JTree tree, @Nullable CheckBoxTree.CheckBoxInitializer initializer)
JTree
und ihm kann auch ein
CheckBoxInitializer
mitgegeben werden. Geschieht dies nicht, so
werden alle Check-Boxen unselektiert initialisiert.tree
- ein JTreeinitializer
- ein CheckBoxInitializer oder null
public void reinitializeCheckBoxes()
public void setLeafsOnly(boolean leafsOnly)
JCheckBox
dekoriert. Mit dieser Methode
kann man dies auf alle Blätter einschränken und auch wieder rückgängig machen.leafsOnly
- ein Booleanpublic void suppressIcons()
DefaultTreeCellRenderer
ist.public void addCheckBoxListener(de.bsvrz.pat.sysbed.dataview.filtering.CheckBoxTree.CheckBoxListener l)
CheckBoxListener
.l
- ein Listenerpublic boolean removeCheckBoxListener(de.bsvrz.pat.sysbed.dataview.filtering.CheckBoxTree.CheckBoxListener l)
CheckBoxListener
und gibt im Erfolgsfall true
zurück.l
- ein Listenerpublic void mousePressed(java.awt.event.MouseEvent e)
JTree
überlassen bleibt, wird das Betätigen
der Check-Boxen hier im MouseListener abgearbeitet.mousePressed
in interface java.awt.event.MouseListener
mousePressed
in class java.awt.event.MouseAdapter
e
- ein Maus-Eventpublic void valueChanged(javax.swing.event.TreeSelectionEvent e)
valueChanged
in interface javax.swing.event.TreeSelectionListener
public java.lang.String toString()
toString
in class java.lang.Object