JIDE 3.5.15

com.jidesoft.swing
Class CheckBoxTreeSelectionModel

java.lang.Object
  extended by javax.swing.tree.DefaultTreeSelectionModel
      extended by com.jidesoft.swing.CheckBoxTreeSelectionModel
All Implemented Interfaces:
Serializable, Cloneable, EventListener, TreeModelListener, TreeSelectionModel
Direct Known Subclasses:
FilterableCheckBoxTreeSelectionModel

public class CheckBoxTreeSelectionModel
extends DefaultTreeSelectionModel
implements TreeModelListener

CheckBoxTreeSelectionModel is a selection _model based on DefaultTreeSelectionModel and use in CheckBoxTree to keep track of the checked tree paths.

Author:
Santhosh Kumar T
See Also:
Serialized Form

Field Summary
protected  Set<TreePath> _pathHasAdded
          Used in areSiblingsSelected(javax.swing.tree.TreePath) for those paths pending added so that they are not in the selection model right now.
 
Fields inherited from class javax.swing.tree.DefaultTreeSelectionModel
changeSupport, leadIndex, leadPath, leadRow, listenerList, listSelectionModel, rowMapper, selection, SELECTION_MODE_PROPERTY, selectionMode
 
Fields inherited from interface javax.swing.tree.TreeSelectionModel
CONTIGUOUS_TREE_SELECTION, DISCONTIGUOUS_TREE_SELECTION, SINGLE_TREE_SELECTION
 
Constructor Summary
CheckBoxTreeSelectionModel(TreeModel model)
           
CheckBoxTreeSelectionModel(TreeModel model, boolean digIn)
           
 
Method Summary
 void addSelectionPaths(TreePath[] paths)
          Overrides the method in DefaultTreeSelectionModel to consider digIn mode.
protected  void addSelectionPaths(TreePath[] paths, boolean needCheckPathSelection)
          Add the selection paths.
protected  boolean areSiblingsSelected(TreePath path)
          tells whether all siblings of given path are selected.
protected  Object getChild(Object node, int i)
          Get the child of node in the designated index.
protected  int getChildrenCount(Object node)
          Get the children count
 TreeModel getModel()
           
 boolean isDigIn()
          Gets the dig-in mode.
protected  boolean isParentActuallySelected(TreePath path, TreePath parent)
          Check if the parent path is really selected.
 boolean isPartiallySelected(TreePath path)
          Tests whether there is any unselected node in the subtree of given path.
 boolean isPathSelected(TreePath path)
           
 boolean isPathSelected(TreePath path, boolean digIn)
          Tells whether given path is selected.
 boolean isRowSelected(int row)
           
 boolean isSingleEventMode()
           
protected  void notifyPathChange(TreePath[] changedPaths, boolean isNew, TreePath oldLeadSelection)
          Notifies listeners of a change in path.
protected  void notifyPathChange(Vector changedPaths, TreePath oldLeadSelection)
           
 void removeSelectionPaths(TreePath[] paths)
           
 void removeSelectionPaths(TreePath[] paths, boolean doFireEvent)
           
 void setBatchMode(boolean batchMode)
           
 void setDigIn(boolean digIn)
          Sets the dig-in mode.
 void setModel(TreeModel model)
           
 void setSelectionPaths(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(TreeModelEvent e)
           
 void treeNodesInserted(TreeModelEvent e)
           
 void treeNodesRemoved(TreeModelEvent e)
           
 void treeStructureChanged(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
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

_pathHasAdded

protected Set<TreePath> _pathHasAdded
Used in areSiblingsSelected(javax.swing.tree.TreePath) for those paths pending added so that they are not in the selection model right now.

Constructor Detail

CheckBoxTreeSelectionModel

public CheckBoxTreeSelectionModel(TreeModel model)

CheckBoxTreeSelectionModel

public CheckBoxTreeSelectionModel(TreeModel model,
                                  boolean digIn)
Method Detail

getModel

public TreeModel getModel()

setModel

public void setModel(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(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 interface TreeSelectionModel
Overrides:
isRowSelected in class DefaultTreeSelectionModel

isParentActuallySelected

protected boolean isParentActuallySelected(TreePath path,
                                           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 checked
parent - 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(TreePath path)
Specified by:
isPathSelected in interface TreeSelectionModel
Overrides:
isPathSelected in class DefaultTreeSelectionModel

isPathSelected

public boolean isPathSelected(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(Vector changedPaths,
                                TreePath oldLeadSelection)
Overrides:
notifyPathChange in class DefaultTreeSelectionModel

setSelectionPaths

public void setSelectionPaths(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 interface TreeSelectionModel
Overrides:
setSelectionPaths in class DefaultTreeSelectionModel
Parameters:
pPaths - the tree paths to be selected.

addSelectionPaths

public void addSelectionPaths(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 interface TreeSelectionModel
Overrides:
addSelectionPaths in class DefaultTreeSelectionModel
Parameters:
paths - the tree paths to be added to selection paths.

addSelectionPaths

protected void addSelectionPaths(TreePath[] paths,
                                 boolean needCheckPathSelection)
Add the selection paths.

Parameters:
paths - the paths to be added
needCheckPathSelection - the flag to indicating if the path selection should be checked to improve performance

areSiblingsSelected

protected boolean areSiblingsSelected(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(TreePath[] paths)
Specified by:
removeSelectionPaths in interface TreeSelectionModel
Overrides:
removeSelectionPaths in class DefaultTreeSelectionModel

removeSelectionPaths

public void removeSelectionPaths(TreePath[] paths,
                                 boolean doFireEvent)

getChild

protected Object getChild(Object node,
                          int i)
Get the child of node in the designated index.

Parameters:
node - the parent node
i - the child index
Returns:
the child node

getChildrenCount

protected int getChildrenCount(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,

 A -- a
   |- b
   |- c
 
Case 1: Assuming b and c are selected at this point, you click on a.

Case 2: Assuming none of the nodes are selected, you click on A. In this case, both modes result in the same behavior.

Case 3: Assuming b and c are selected and now you click on A. As you can see, single event mode will always fire the event on the nodes you select. However it doesn't reflect what really happened inside the selection model. So if you want to get a complete picture of the selection state inside selection model, you should use 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(TreePath[] changedPaths,
                                boolean isNew,
                                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(TreeModelEvent e)
Specified by:
treeNodesChanged in interface TreeModelListener

treeNodesInserted

public void treeNodesInserted(TreeModelEvent e)
Specified by:
treeNodesInserted in interface TreeModelListener

treeNodesRemoved

public void treeNodesRemoved(TreeModelEvent e)
Specified by:
treeNodesRemoved in interface TreeModelListener

treeStructureChanged

public void treeStructureChanged(TreeModelEvent e)
Specified by:
treeStructureChanged in interface TreeModelListener

JIDE 3.5.15