Package com.jidesoft.swing
Class CheckBoxTreeSelectionModel
- java.lang.Object
-
- javax.swing.tree.DefaultTreeSelectionModel
-
- com.jidesoft.swing.CheckBoxTreeSelectionModel
-
- All Implemented Interfaces:
java.io.Serializable
,java.lang.Cloneable
,java.util.EventListener
,javax.swing.event.TreeModelListener
,javax.swing.tree.TreeSelectionModel
public class CheckBoxTreeSelectionModel extends javax.swing.tree.DefaultTreeSelectionModel implements javax.swing.event.TreeModelListener
CheckBoxTreeSelectionModel
is a selection _model based onDefaultTreeSelectionModel
and use inCheckBoxTree
to keep track of the checked tree paths.- Author:
- Santhosh Kumar T
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected java.util.Set<javax.swing.tree.TreePath>
_pathHasAdded
Used inareSiblingsSelected(javax.swing.tree.TreePath)
for those paths pending added so that they are not in the selection model right now.
-
Constructor Summary
Constructors Constructor Description CheckBoxTreeSelectionModel(javax.swing.tree.TreeModel model)
CheckBoxTreeSelectionModel(javax.swing.tree.TreeModel model, boolean digIn)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addSelectionPaths(javax.swing.tree.TreePath[] paths)
Overrides the method in DefaultTreeSelectionModel to consider digIn mode.protected void
addSelectionPaths(javax.swing.tree.TreePath[] paths, boolean needCheckPathSelection)
Add the selection paths.protected boolean
areSiblingsSelected(javax.swing.tree.TreePath path)
tells whether all siblings of given path are selected.protected java.lang.Object
getChild(java.lang.Object node, int i)
Get the child of node in the designated index.protected int
getChildrenCount(java.lang.Object node)
Get the children countjavax.swing.tree.TreeModel
getModel()
boolean
isDigIn()
Gets the dig-in mode.protected boolean
isParentActuallySelected(javax.swing.tree.TreePath path, javax.swing.tree.TreePath parent)
Check if the parent path is really selected.boolean
isPartiallySelected(javax.swing.tree.TreePath path)
Tests whether there is any unselected node in the subtree of given path.boolean
isPathSelected(javax.swing.tree.TreePath path)
boolean
isPathSelected(javax.swing.tree.TreePath path, boolean digIn)
Tells whether given path is selected.boolean
isRowSelected(int row)
boolean
isSingleEventMode()
protected void
notifyPathChange(java.util.Vector changedPaths, javax.swing.tree.TreePath oldLeadSelection)
protected void
notifyPathChange(javax.swing.tree.TreePath[] changedPaths, boolean isNew, javax.swing.tree.TreePath oldLeadSelection)
Notifies listeners of a change in path.void
removeSelectionPaths(javax.swing.tree.TreePath[] paths)
void
removeSelectionPaths(javax.swing.tree.TreePath[] paths, boolean doFireEvent)
void
setBatchMode(boolean batchMode)
void
setDigIn(boolean digIn)
Sets the dig-in mode.void
setModel(javax.swing.tree.TreeModel model)
void
setSelectionPaths(javax.swing.tree.TreePath[] pPaths)
Overrides the method in DefaultTreeSelectionModel to consider digIn mode.void
setSingleEventMode(boolean singleEventMode)
Single event mode is a mode that always fires only one event when you select or deselect a tree node.void
treeNodesChanged(javax.swing.event.TreeModelEvent e)
void
treeNodesInserted(javax.swing.event.TreeModelEvent e)
void
treeNodesRemoved(javax.swing.event.TreeModelEvent e)
void
treeStructureChanged(javax.swing.event.TreeModelEvent e)
-
Methods inherited from class javax.swing.tree.DefaultTreeSelectionModel
addPropertyChangeListener, addSelectionPath, addTreeSelectionListener, arePathsContiguous, canPathsBeAdded, canPathsBeRemoved, clearSelection, clone, fireValueChanged, getLeadSelectionPath, getLeadSelectionRow, getListeners, getMaxSelectionRow, getMinSelectionRow, getPropertyChangeListeners, getRowMapper, getSelectionCount, getSelectionMode, getSelectionPath, getSelectionPaths, getSelectionRows, getTreeSelectionListeners, insureRowContinuity, insureUniqueness, isSelectionEmpty, removePropertyChangeListener, removeSelectionPath, removeTreeSelectionListener, resetRowSelection, setRowMapper, setSelectionMode, setSelectionPath, toString, updateLeadIndex
-
-
-
-
Field Detail
-
_pathHasAdded
protected java.util.Set<javax.swing.tree.TreePath> _pathHasAdded
Used inareSiblingsSelected(javax.swing.tree.TreePath)
for those paths pending added so that they are not in the selection model right now.
-
-
Method Detail
-
getModel
public javax.swing.tree.TreeModel getModel()
-
setModel
public void setModel(javax.swing.tree.TreeModel model)
-
isDigIn
public boolean isDigIn()
Gets the dig-in mode. If the CheckBoxTree is in dig-in mode, checking the parent node will check all the children. Correspondingly, getSelectionPaths() will only return the parent tree path. If not in dig-in mode, each tree node can be checked or unchecked independently- Returns:
- true or false.
-
setDigIn
public void setDigIn(boolean digIn)
Sets the dig-in mode. If the CheckBoxTree is in dig-in mode, checking the parent node will check all the children. Correspondingly, getSelectionPaths() will only return the parent tree path. If not in dig-in mode, each tree node can be checked or unchecked independently- Parameters:
digIn
- true to enable dig-in mode. False to disable it.
-
isPartiallySelected
public boolean isPartiallySelected(javax.swing.tree.TreePath path)
Tests whether there is any unselected node in the subtree of given path. Inherited from JTree, the TreePath must be a path instance inside the tree model. If you populate a new TreePath instance on the fly, it would not work.- Parameters:
path
- check if the path is partially selected.- Returns:
- true if partially. Otherwise false.
-
isRowSelected
public boolean isRowSelected(int row)
- Specified by:
isRowSelected
in interfacejavax.swing.tree.TreeSelectionModel
- Overrides:
isRowSelected
in classjavax.swing.tree.DefaultTreeSelectionModel
-
isParentActuallySelected
protected boolean isParentActuallySelected(javax.swing.tree.TreePath path, javax.swing.tree.TreePath parent)
Check if the parent path is really selected. The default implementation is just return true. In filterable scenario, you could override this method to check more. Inherited from JTree, the TreePath must be a path instance inside the tree model. If you populate a new TreePath instance on the fly, it would not work.- Parameters:
path
- the original path to be checkedparent
- the parent part which is closest to the original path and is selected- Returns:
- true if the path is actually selected without any doubt. Otherwise false.
-
isPathSelected
public boolean isPathSelected(javax.swing.tree.TreePath path)
- Specified by:
isPathSelected
in interfacejavax.swing.tree.TreeSelectionModel
- Overrides:
isPathSelected
in classjavax.swing.tree.DefaultTreeSelectionModel
-
isPathSelected
public boolean isPathSelected(javax.swing.tree.TreePath path, boolean digIn)
Tells whether given path is selected. if dig is true, then a path is assumed to be selected, if one of its ancestor is selected. Inherited from JTree, the TreePath must be a path instance inside the tree model. If you populate a new TreePath instance on the fly, it would not work.- Parameters:
path
- check if the path is selected.digIn
- whether we will check its descendants.- Returns:
- true if the path is selected.
-
notifyPathChange
protected void notifyPathChange(java.util.Vector changedPaths, javax.swing.tree.TreePath oldLeadSelection)
- Overrides:
notifyPathChange
in classjavax.swing.tree.DefaultTreeSelectionModel
-
setSelectionPaths
public void setSelectionPaths(javax.swing.tree.TreePath[] pPaths)
Overrides the method in DefaultTreeSelectionModel to consider digIn mode. Inherited from JTree, the TreePath must be a path instance inside the tree model. If you populate a new TreePath instance on the fly, it would not work.- Specified by:
setSelectionPaths
in interfacejavax.swing.tree.TreeSelectionModel
- Overrides:
setSelectionPaths
in classjavax.swing.tree.DefaultTreeSelectionModel
- Parameters:
pPaths
- the tree paths to be selected.
-
addSelectionPaths
public void addSelectionPaths(javax.swing.tree.TreePath[] paths)
Overrides the method in DefaultTreeSelectionModel to consider digIn mode. Inherited from JTree, the TreePath must be a path instance inside the tree model. If you populate a new TreePath instance on the fly, it would not work.- Specified by:
addSelectionPaths
in interfacejavax.swing.tree.TreeSelectionModel
- Overrides:
addSelectionPaths
in classjavax.swing.tree.DefaultTreeSelectionModel
- Parameters:
paths
- the tree paths to be added to selection paths.
-
addSelectionPaths
protected void addSelectionPaths(javax.swing.tree.TreePath[] paths, boolean needCheckPathSelection)
Add the selection paths.- Parameters:
paths
- the paths to be addedneedCheckPathSelection
- the flag to indicating if the path selection should be checked to improve performance
-
areSiblingsSelected
protected boolean areSiblingsSelected(javax.swing.tree.TreePath path)
tells whether all siblings of given path are selected. Inherited from JTree, the TreePath must be a path instance inside the tree model. If you populate a new TreePath instance on the fly, it would not work.- Parameters:
path
- the tree path- Returns:
- true if the siblings are all selected.
-
removeSelectionPaths
public void removeSelectionPaths(javax.swing.tree.TreePath[] paths)
- Specified by:
removeSelectionPaths
in interfacejavax.swing.tree.TreeSelectionModel
- Overrides:
removeSelectionPaths
in classjavax.swing.tree.DefaultTreeSelectionModel
-
removeSelectionPaths
public void removeSelectionPaths(javax.swing.tree.TreePath[] paths, boolean doFireEvent)
-
getChild
protected java.lang.Object getChild(java.lang.Object node, int i)
Get the child of node in the designated index.- Parameters:
node
- the parent nodei
- the child index- Returns:
- the child node
-
getChildrenCount
protected int getChildrenCount(java.lang.Object node)
Get the children count- Parameters:
node
- the parent node- Returns:
- the children count of the parent node.
-
isSingleEventMode
public boolean isSingleEventMode()
-
setSingleEventMode
public void setSingleEventMode(boolean singleEventMode)
Single event mode is a mode that always fires only one event when you select or deselect a tree node. Taking this tree as an example,
Case 1: Assuming b and c are selected at this point, you click on a.A -- a |- b |- c
- In non-single event mode, you will get select-A, deselect-b and deselect-c three events
- In single event mode, you will only get select-a.
- In non-single event mode, you will get only select-A event.
- In single event mode, you will only get select-A too.
- In non-single event mode, you will get select-A event as well as deselect-b and deselect-c event.
- In single event mode, you will only get select-A.
DefaultTreeSelectionModel.getSelectionPaths()
to find out. In non-single event mode, the events reflect what happened inside the selection model. So you can get a complete picture of the exact state without asking the selection model. The downside is it will generate too many events. With this option, you can decide which mode you want to use that is the best for your case. By default, singleEventMode is set to false to be compatible with the older versions that don't have this option.- Parameters:
singleEventMode
- true or false.
-
notifyPathChange
protected void notifyPathChange(javax.swing.tree.TreePath[] changedPaths, boolean isNew, javax.swing.tree.TreePath oldLeadSelection)
Notifies listeners of a change in path. changePaths should contain instances of PathPlaceHolder.- Parameters:
changedPaths
- the paths that are changed.isNew
- is it a new path.oldLeadSelection
- the old selection.
-
setBatchMode
public void setBatchMode(boolean batchMode)
-
treeNodesChanged
public void treeNodesChanged(javax.swing.event.TreeModelEvent e)
- Specified by:
treeNodesChanged
in interfacejavax.swing.event.TreeModelListener
-
treeNodesInserted
public void treeNodesInserted(javax.swing.event.TreeModelEvent e)
- Specified by:
treeNodesInserted
in interfacejavax.swing.event.TreeModelListener
-
treeNodesRemoved
public void treeNodesRemoved(javax.swing.event.TreeModelEvent e)
- Specified by:
treeNodesRemoved
in interfacejavax.swing.event.TreeModelListener
-
treeStructureChanged
public void treeStructureChanged(javax.swing.event.TreeModelEvent e)
- Specified by:
treeStructureChanged
in interfacejavax.swing.event.TreeModelListener
-
-