Class CheckBoxTree
- java.lang.Object
-
- java.awt.event.MouseAdapter
-
- de.bsvrz.pat.sysbed.dataview.filtering.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 einerJCheckBox
pro Knoten bzw. Blatt. Dabei übernimmtCheckBoxTree
den Renderer der Original-JTree-Objekts und gegebenenfalls auch einen Editor. Das InterfaceCheckBoxListener
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 dortCheckTreeManager
. 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 einDefaultTreeSelectionModel
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 derCheckBoxTree
keineComponent
ist, wird nicht er, sondern der dekorierteJTree
inContainer
gesteckt.Einschränkungen: (1) Im Konstruktor von
CheckBoxTree
wird derTreeCellRenderer
und gegebenfalls derTreeCellEditor
des übergebenenJTrees
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 MethodenJTree.setCellRenderer
undJTree.setCellEditor
nach dem Konstruktor-Aufruf tabu. (2) Der Original-Renderer des übergebenenJTrees
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 dasTableModel
desJTrees
: ist dies einDefaultTableModel
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 wirdreinitializeCheckBoxes
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 interface
CheckBoxTree.CheckBoxInitializer
-
Constructor Summary
Constructors Constructor Description CheckBoxTree(javax.swing.JTree tree, CheckBoxTree.CheckBoxInitializer initializer)
Der Konstruktor.
-
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 einenCheckBoxListener
.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.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 einenCheckBoxListener
und gibt im Erfolgsfalltrue
zurück.void
setLeafsOnly(boolean leafsOnly)
Im Defaultzustand wird jeder Knoten mit einerJCheckBox
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)
-
-
-
Constructor Detail
-
CheckBoxTree
public CheckBoxTree(javax.swing.JTree tree, @Nullable CheckBoxTree.CheckBoxInitializer initializer)
Der Konstruktor. Er benötigt einenJTree
und ihm kann auch einCheckBoxInitializer
mitgegeben werden. Geschieht dies nicht, so werden alle Check-Boxen unselektiert initialisiert.- Parameters:
tree
- ein JTreeinitializer
- ein CheckBoxInitializer odernull
-
-
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 einerJCheckBox
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 einDefaultTreeCellRenderer
ist.
-
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 einenCheckBoxListener
und gibt im Erfolgsfalltrue
zurü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:
mousePressed
in interfacejava.awt.event.MouseListener
- Overrides:
mousePressed
in classjava.awt.event.MouseAdapter
- Parameters:
e
- ein Maus-Event
-
valueChanged
public void valueChanged(javax.swing.event.TreeSelectionEvent e)
- Specified by:
valueChanged
in interfacejavax.swing.event.TreeSelectionListener
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
-