oracle.com/javase/tutorial/uiswing/components/tree.html">How to Use Trees in
The Java Tutorial. The state of the tree selection is characterized by a set of TreePaths, and optionally a set of integers. The mapping from TreePath to integer is done by way of an instance of RowMapper. It is not necessary for a TreeSelectionModel to have a RowMapper to correctly operate, but without a RowMapper getSelectionRows
will return null.
A TreeSelectionModel can be configured to allow only one path (SINGLE_TREE_SELECTION
) a number of contiguous paths (CONTIGUOUS_TREE_SELECTION
) or a number of discontiguous paths (DISCONTIGUOUS_TREE_SELECTION
). A RowMapper
is used to determine if TreePaths are contiguous. In the absence of a RowMapper CONTIGUOUS_TREE_SELECTION
and DISCONTIGUOUS_TREE_SELECTION
behave the same, that is they allow any number of paths to be contained in the TreeSelectionModel.
For a selection model of CONTIGUOUS_TREE_SELECTION
any time the paths are changed (setSelectionPath
, addSelectionPath
...) the TreePaths are again checked to make they are contiguous. A check of the TreePaths can also be forced by invoking resetRowSelection
. How a set of discontiguous TreePaths is mapped to a contiguous set is left to implementors of this interface to enforce a particular policy.
Implementations should combine duplicate TreePaths that are added to the selection. For example, the following code
TreePath[] paths = new TreePath[] { treePath, treePath }; treeSelectionModel.setSelectionPaths(paths);
should result in only one path being selected:
treePath
, and not two copies of
treePath
.
The lead TreePath is the last path that was added (or set). The lead row is then the row that corresponds to the TreePath as determined from the RowMapper.
@author Scott Violet