Module java.desktop
Package javax.swing.tree

Class DefaultTreeSelectionModel

java.lang.Object
javax.swing.tree.DefaultTreeSelectionModel
所有已实现的接口:
Serializable, Cloneable, TreeSelectionModel
直接已知的子类:
JTree.EmptySelectionModel

public class DefaultTreeSelectionModel extends Object implements Cloneable, Serializable, TreeSelectionModel
TreeSelectionModel的默认实现。每当选择更改时,通知侦听器路径而不是行。为了能够跟踪行更改,您可能希望成为树上扩展事件的侦听器,并从那里测试更改。

resetRowSelection是从更新所选路径的任何方法中调用的。如果您对这些方法中的任何一个进行子类化以过滤允许选择的内容,请确保如果您没有调用super,则消息resetRowSelection警告:此类的序列化对象将与未来的Swing版本不兼容。当前的序列化支持适用于短期存储或在运行相同Swing版本的应用程序之间的RMI。从1.4开始,已将对所有JavaBeans的长期存储支持添加到java.beans包中。请参阅XMLEncoder

参见:
  • Field Details

    • SELECTION_MODE_PROPERTY

      public static final String SELECTION_MODE_PROPERTY
      选择模式的属性名称。
      参见:
    • changeSupport

      protected SwingPropertyChangeSupport changeSupport
      用于通知已注册的侦听器。
    • selection

      protected TreePath[] selection
      当前选择的路径。如果当前没有选择任何内容,则将为null。
    • listenerList

      protected EventListenerList listenerList
      事件侦听器列表。
    • rowMapper

      protected transient RowMapper rowMapper
      为给定路径提供行。
    • listSelectionModel

      protected DefaultListSelectionModel listSelectionModel
      处理维护列表选择模型。RowMapper用于从TreePath映射到行,然后将值放在这里。
    • selectionMode

      protected int selectionMode
      选择模式,将是SINGLE_TREE_SELECTION、CONTIGUOUS_TREE_SELECTION或DISCONTIGUOUS_TREE_SELECTION之一。
    • leadPath

      protected TreePath leadPath
      最后添加的路径。
    • leadIndex

      protected int leadIndex
      选择中导航路径的索引。
    • leadRow

      protected int leadRow
      导航行。
  • Constructor Details

    • DefaultTreeSelectionModel

      public DefaultTreeSelectionModel()
      创建一个空的DISCONTIGUOUS_TREE_SELECTION选择模式的DefaultTreeSelectionModel的新实例。
  • Method Details

    • setRowMapper

      public void setRowMapper(RowMapper newMapper)
      设置RowMapper实例。此实例用于确定特定TreePath的行。
      指定者:
      setRowMapper 在接口 TreeSelectionModel
      参数:
      newMapper - 要设置的RowMapper
    • getRowMapper

      public RowMapper getRowMapper()
      返回能够将TreePath映射到行的RowMapper实例。
      指定者:
      getRowMapper 在接口 TreeSelectionModel
      返回:
      能够将TreePath映射到行的RowMapper实例
    • setSelectionMode

      public void setSelectionMode(int mode)
      设置选择模型,必须是SINGLE_TREE_SELECTION、CONTIGUOUS_TREE_SELECTION或DISCONTIGUOUS_TREE_SELECTION之一。如果模式不是定义的值之一,则假定为DISCONTIGUOUS_TREE_SELECTION

      如果当前选择对于新模式无效,则可能会更改选择。例如,当将模式更改为SINGLE_TREE_SELECTION时选择了三个TreePaths,那么只会保留一个TreePath被选择。由特定实现决定保留哪个TreePath被选择。

      将模式设置为非定义类型将导致模式变为DISCONTIGUOUS_TREE_SELECTION

      指定者:
      setSelectionMode 在接口 TreeSelectionModel
      参数:
      mode - 要设置的选择模式
    • getSelectionMode

      public int getSelectionMode()
      返回选择模式,为SINGLE_TREE_SELECTION、DISCONTIGUOUS_TREE_SELECTION或CONTIGUOUS_TREE_SELECTION之一。
      指定者:
      getSelectionMode 在接口 TreeSelectionModel
      返回:
      当前选择模式
    • setSelectionPath

      public void setSelectionPath(TreePath path)
      将选择设置为路径。如果这代表更改,则会通知TreeSelectionListeners。如果path为null,则这与调用clearSelection具有相同效果。
      指定者:
      setSelectionPath 在接口 TreeSelectionModel
      参数:
      path - 要选择的新路径
    • setSelectionPaths

      public void setSelectionPaths(TreePath[] pPaths)
      设置选择。取决于选择模式,所提供的路径是否作为新选择取决于选择模式。如果提供的数组为null或为空,则清除选择。如果选择模式为SINGLE_TREE_SELECTION,则仅使用pPaths中的第一个路径。如果选择模式为CONTIGUOUS_TREE_SELECTION并且提供的路径不连续,则仅使用pPaths中的第一个路径。如果选择模式为DISCONTIGUOUS_TREE_SELECTION,则使用所有路径。

      忽略pPaths中的所有null路径。

      如果这代表了一种变化,则会通知所有注册的TreeSelectionListener

      主路径设置为最后一个唯一路径。

      getSelectionPaths返回的路径与传递给此方法的路径顺序相同。

      指定者:
      setSelectionPaths 在接口 TreeSelectionModel
      参数:
      pPaths - 新选择
    • addSelectionPath

      public void addSelectionPath(TreePath path)
      将路径添加到当前选择。如果路径当前不在选择中,则会通知TreeSelectionListeners。如果path为null,则不会产生任何影响。
      指定者:
      addSelectionPath 在接口 TreeSelectionModel
      参数:
      path - 要添加到当前选择的新路径
    • addSelectionPaths

      public void addSelectionPaths(TreePath[] paths)
      将路径添加到当前选择。如果路径中的任何路径当前不在选择中,则会通知TreeSelectionListeners。如果paths为null,则不会产生任何影响。

      主路径设置为paths中的最后一个元素。

      如果选择模式为CONTIGUOUS_TREE_SELECTION,并且添加新路径会使选择不连续。那么可能会发生两种情况:如果paths中的TreePaths是连续的,则选择变为这些TreePaths,否则TreePaths不连续,选择变为paths中的第一个TreePath。

      指定者:
      addSelectionPaths 在接口 TreeSelectionModel
      参数:
      paths - 要添加到当前选择的新路径
    • removeSelectionPath

      public void removeSelectionPath(TreePath path)
      从选择中移除路径。如果路径在选择中,则会通知TreeSelectionListeners。如果path为null,则不会产生任何影响。
      指定者:
      removeSelectionPath 在接口 TreeSelectionModel
      参数:
      path - 要从选择中移除的路径
    • removeSelectionPaths

      public void removeSelectionPaths(TreePath[] paths)
      从选择中移除路径。如果路径中的任何路径在选择中,则会通知TreeSelectionListeners。如果paths为null,则不会产生任何影响。
      指定者:
      removeSelectionPaths 在接口 TreeSelectionModel
      参数:
      paths - 要从选择中移除的路径
    • getSelectionPath

      public TreePath getSelectionPath()
      返回选择中的第一个路径。如果当前仅选择了一个项目,则此方法很有用。
      指定者:
      getSelectionPath 在接口 TreeSelectionModel
      返回:
      选择中的第一个路径
    • getSelectionPaths

      public TreePath[] getSelectionPaths()
      返回选择。
      指定者:
      getSelectionPaths 在接口 TreeSelectionModel
      返回:
      选择
    • getSelectionCount

      public int getSelectionCount()
      返回所选路径的数量。
      指定者:
      getSelectionCount 在接口 TreeSelectionModel
      返回:
      所选路径的数量
    • isPathSelected

      public boolean isPathSelected(TreePath path)
      如果路径path当前在选择中,则返回true。
      指定者:
      isPathSelected 在接口 TreeSelectionModel
      参数:
      path - 要查找的路径
      返回:
      path是否在当前选择中
    • isSelectionEmpty

      public boolean isSelectionEmpty()
      如果选择当前为空,则返回true。
      指定者:
      isSelectionEmpty 在接口 TreeSelectionModel
      返回:
      选择当前是否为空
    • clearSelection

      public void clearSelection()
      清空当前选择。如果这代表当前选择的变化,则会通知选择监听器。
      指定者:
      clearSelection 在接口 TreeSelectionModel
    • addTreeSelectionListener

      public void addTreeSelectionListener(TreeSelectionListener x)
      将x添加到每次选定的TreePaths集合更改时通知的侦听器列表中。
      指定者:
      addTreeSelectionListener 在接口 TreeSelectionModel
      参数:
      x - 要添加的新侦听器
    • removeTreeSelectionListener

      public void removeTreeSelectionListener(TreeSelectionListener x)
      从每次选定的TreePaths集合更改时通知的侦听器列表中移除x。
      指定者:
      removeTreeSelectionListener 在接口 TreeSelectionModel
      参数:
      x - 要移除的侦听器
    • getTreeSelectionListeners

      public TreeSelectionListener[] getTreeSelectionListeners()
      返回当前在此模型上注册为树选择侦听器的所有数组。
      返回:
      所有此模型的TreeSelectionListener或如果当前未注册任何树选择侦听器,则返回空数组
      自:
      1.4
      参见:
    • fireValueChanged

      protected void fireValueChanged(TreeSelectionEvent e)
      通知所有已注册以接收此对象上的树选择事件的侦听器。
      参数:
      e - 表征更改的事件
      参见:
    • getListeners

      public <T extends EventListener> T[] getListeners(Class<T> listenerType)
      返回当前在此模型上注册为FooListener的所有对象的数组。使用addFooListener方法注册FooListener

      您可以使用类文字(例如FooListener.class)指定listenerType参数。例如,您可以使用以下代码查询DefaultTreeSelectionModel m的树选择侦听器:

      TreeSelectionListener[] tsls = (TreeSelectionListener[])(m.getListeners(TreeSelectionListener.class));
      如果不存在此类侦听器,则此方法将返回一个空数组。
      类型参数:
      T - 侦听器类型
      参数:
      listenerType - 请求的侦听器类型
      返回:
      在此组件上注册为FooListener的所有对象的数组,如果尚未添加此类侦听器,则返回空数组
      抛出:
      ClassCastException - 如果listenerType未指定实现java.util.EventListener的类或接口
      自:
      1.3
      参见:
    • getSelectionRows

      public int[] getSelectionRows()
      返回以行为单位的选择。从getSelectionPaths返回的TreePath和此方法之间不一定是一对一的映射。特别是,如果TreePath不可见(RowMapper对应于TreePath的行返回-1),则返回的数组中不包括相应的行。例如,如果选择包括两个路径AB,其中A在第10行,而B当前不可见,则此方法返回具有单个条目10的数组。
      指定者:
      getSelectionRows 在接口 TreeSelectionModel
      返回:
      以行为单位的选择
    • getMinSelectionRow

      public int getMinSelectionRow()
      返回当前所选TreePaths集合中从RowMapper获得的最小值。如果没有选中任何内容,或者没有RowMapper,则返回-1。
      指定者:
      getMinSelectionRow 在接口 TreeSelectionModel
      返回:
      从当前所选TreePaths集合中的RowMapper获得的最小值
    • getMaxSelectionRow

      public int getMaxSelectionRow()
      返回当前所选TreePaths集合中从RowMapper获得的最大值。如果没有选中任何内容,或者没有RowMapper,则返回-1。
      指定者:
      getMaxSelectionRow 在接口 TreeSelectionModel
      返回:
      从当前所选TreePaths集合中的RowMapper获得的最大值
    • isRowSelected

      public boolean isRowSelected(int row)
      如果由row标识的行被选中,则返回true。
      指定者:
      isRowSelected 在接口 TreeSelectionModel
      参数:
      row - 要检查的行
      返回:
      行是否被选中
    • resetRowSelection

      public void resetRowSelection()
      更新此对象从TreePath到行的映射。当从TreePaths到整数的映射发生变化时(例如,节点已展开),应调用此方法。

      通常不需要调用此方法,JTree及其相关的监听器会为您调用此方法。如果您正在实现自己的View类,则必须调用此方法。

      这将调用insureRowContinuity以确保当前选定的TreePaths基于选择模式仍然有效。

      指定者:
      resetRowSelection 在接口 TreeSelectionModel
    • getLeadSelectionRow

      public int getLeadSelectionRow()
      返回主导选择索引。即最后添加的索引。
      指定者:
      getLeadSelectionRow 在接口 TreeSelectionModel
      返回:
      主导选择索引
    • getLeadSelectionPath

      public TreePath getLeadSelectionPath()
      返回最后添加的路径。这可能与JTree维护的leadSelectionPath属性不同。
      指定者:
      getLeadSelectionPath 在接口 TreeSelectionModel
      返回:
      最后添加的路径
    • addPropertyChangeListener

      public void addPropertyChangeListener(PropertyChangeListener listener)
      向监听器列表中添加PropertyChangeListener。该监听器将注册所有属性。

      当选择模式更改时,将触发PropertyChangeEvent。

      指定者:
      addPropertyChangeListener 在接口 TreeSelectionModel
      参数:
      listener - 要添加的PropertyChangeListener
    • removePropertyChangeListener

      public void removePropertyChangeListener(PropertyChangeListener listener)
      从监听器列表中移除PropertyChangeListener。这将删除为所有属性注册的PropertyChangeListener。
      指定者:
      removePropertyChangeListener 在接口 TreeSelectionModel
      参数:
      listener - 要移除的PropertyChangeListener
    • getPropertyChangeListeners

      public PropertyChangeListener[] getPropertyChangeListeners()
      返回在此DefaultTreeSelectionModel上注册的所有属性更改监听器的数组。
      返回:
      所有此模型的PropertyChangeListener或如果当前未注册任何属性更改监听器,则返回空数组
      自:
      1.4
      参见:
    • insureRowContinuity

      protected void insureRowContinuity()
      确保当前选定的TreePath对于当前选择模式是有效的。如果选择模式为CONTIGUOUS_TREE_SELECTION并且存在RowMapper,则会确保所有行是连续的,即,排序后所有行都是有序的且没有间隙。如果选择不连续,则将重置选择以包含第一组连续行(排序后)。

      如果选择模式为SINGLE_TREE_SELECTION并且选择了多个TreePath,则将重置选择以包含当前选定的第一个路径。

    • arePathsContiguous

      protected boolean arePathsContiguous(TreePath[] paths)
      如果路径是连续的,或者此对象没有RowMapper,则返回true。
      参数:
      paths - 要检查的路径数组
      返回:
      路径是否连续,或者此对象没有RowMapper
    • canPathsBeAdded

      protected boolean canPathsBeAdded(TreePath[] paths)
      用于测试特定一组TreePath是否可以添加。如果paths为null(或空),或者此对象没有RowMapper,或者当前未选中任何内容,或者选择模式为DISCONTIGUOUS_TREE_SELECTION,或者将路径添加到当前选择仍然导致一组连续的TreePath,则返回true。
      参数:
      paths - 要检查的TreePaths数组
      返回:
      特定一组TreePaths是否可以添加
    • canPathsBeRemoved

      protected boolean canPathsBeRemoved(TreePath[] paths)
      如果可以在不破坏模型连续性的情况下移除路径,则返回true。这是相当昂贵的操作。
      参数:
      paths - 要检查的TreePath数组
      返回:
      是否可以在不破坏模型连续性的情况下移除路径
    • notifyPathChange

      @Deprecated protected void notifyPathChange(Vector<?> changedPaths, TreePath oldLeadSelection)
      Deprecated.
      As of JDK version 1.7
      通知路径更改的监听器。changePaths应包含PathPlaceHolder的实例。
      参数:
      changedPaths - 更改的路径向量
      oldLeadSelection - 旧的选择路径
    • updateLeadIndex

      protected void updateLeadIndex()
      更新leadIndex实例变量。
    • insureUniqueness

      protected void insureUniqueness()
      此方法已过时,其实现现在是一个空操作。它仍然由setSelectionPaths和addSelectionPaths调用,但仅用于向后兼容性。
    • toString

      public String toString()
      返回显示和标识此对象属性的字符串。
      覆盖:
      toString 在类 Object
      返回:
      此对象的字符串表示
    • clone

      public Object clone() throws CloneNotSupportedException
      返回具有相同选择的此对象的克隆。此方法不会复制选择监听器和属性监听器。
      覆盖:
      clone 在类 Object
      返回:
      此实例的克隆。
      抛出:
      CloneNotSupportedException - 该类的实例永远不会抛出此异常
      参见: