Module java.desktop
Package javax.swing.tree

Interface TreeSelectionModel

所有已知的实现类:
DefaultTreeSelectionModel, JTree.EmptySelectionModel

public interface TreeSelectionModel
该接口表示树组件选择的当前状态。有关使用树选择模型的信息和示例,请参阅Java教程中的如何使用树

树选择的状态由一组TreePaths和可选的一组整数来描述。通过RowMapper的实例来完成从TreePath到整数的映射。一个TreeSelectionModel不需要有RowMapper来正确运行,但是没有RowMapper时getSelectionRows将返回null。

TreeSelectionModel可以配置为仅允许一个路径(SINGLE_TREE_SELECTION),一些连续的路径(CONTIGUOUS_TREE_SELECTION)或一些不连续的路径(DISCONTIGUOUS_TREE_SELECTION)。RowMapper用于确定TreePaths是否连续。在没有RowMapper的情况下,CONTIGUOUS_TREE_SELECTIONDISCONTIGUOUS_TREE_SELECTION的行为相同,即它们允许任意数量的路径包含在TreeSelectionModel中。

对于CONTIGUOUS_TREE_SELECTION的选择模型,任何时候更改路径(setSelectionPathaddSelectionPath ...),TreePaths将再次被检查以确保它们是连续的。也可以通过调用resetRowSelection来强制检查TreePaths。如何将一组不连续的TreePaths映射到连续集合由此接口的实现者来执行特定策略。

实现应该合并添加到选择中的重复TreePaths。例如,以下代码

   TreePath[] paths = new TreePath[] { treePath, treePath };
   treeSelectionModel.setSelectionPaths(paths);
 
应该导致只选择一个路径:treePath,而不是两个treePath的副本。

主要TreePath是最后添加(或设置)的路径。然后,主要行是根据RowMapper从TreePath确定的行。

  • Field Details

    • SINGLE_TREE_SELECTION

      static final int SINGLE_TREE_SELECTION
      选择一次只能包含一个路径。
      参见:
    • CONTIGUOUS_TREE_SELECTION

      static final int CONTIGUOUS_TREE_SELECTION
      选择只能是连续的。只有在提供RowMapper实例时才会执行此操作。也就是说,如果没有设置RowMapper,则其行为与DISCONTIGUOUS_TREE_SELECTION相同。
      参见:
    • DISCONTIGUOUS_TREE_SELECTION

      static final int DISCONTIGUOUS_TREE_SELECTION
      选择可以包含任意数量的不一定连续的项目。
      参见:
  • Method Details

    • setSelectionMode

      void setSelectionMode(int mode)
      设置选择模型,必须是SINGLE_TREE_SELECTION、CONTIGUOUS_TREE_SELECTION或DISCONTIGUOUS_TREE_SELECTION之一。

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

      参数:
      mode - 要设置的选择模式
    • getSelectionMode

      int getSelectionMode()
      返回当前选择模式,其中之一为SINGLE_TREE_SELECTIONCONTIGUOUS_TREE_SELECTIONDISCONTIGUOUS_TREE_SELECTION
      返回:
      当前选择模式
    • setSelectionPath

      void setSelectionPath(TreePath path)
      将选择设置为路径。如果这代表一种更改,则会通知TreeSelectionListeners。如果path为null,则效果与调用clearSelection相同。
      参数:
      path - 要选择的新路径
    • setSelectionPaths

      void setSelectionPaths(TreePath[] paths)
      将选择设置为路径。如果这代表一种更改,则会通知TreeSelectionListeners。如果paths为null,则效果与调用clearSelection相同。
      参数:
      paths - 新选择
    • addSelectionPath

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

      void addSelectionPaths(TreePath[] paths)
      将路径添加到当前选择。如果路径中的任何路径当前不在选择中,则会通知TreeSelectionListeners。如果paths为null,则不会产生任何效果。
      参数:
      paths - 要添加到当前选择中的新路径
    • removeSelectionPath

      void removeSelectionPath(TreePath path)
      从选择中移除路径。如果路径在选择中,则会通知TreeSelectionListeners。如果path为null,则不会产生任何效果。
      参数:
      path - 要从选择中移除的路径
    • removeSelectionPaths

      void removeSelectionPaths(TreePath[] paths)
      从选择中移除路径。如果paths中的任何路径在选择中,则会通知TreeSelectionListeners。如果paths为null,则此方法不会产生任何效果。
      参数:
      paths - 要从选择中移除的路径
    • getSelectionPath

      TreePath getSelectionPath()
      返回选择中的第一个路径。如何定义第一个取决于实现者,可能不一定是从RowMapper确定的具有最小整数值的TreePath。
      返回:
      选择中的第一个路径
    • getSelectionPaths

      TreePath[] getSelectionPaths()
      返回选择中的路径。如果当前没有选中任何内容,则将返回null(或空数组)。
      返回:
      选择中的路径
    • getSelectionCount

      int getSelectionCount()
      返回所选路径的数量。
      返回:
      所选路径的数量
    • isPathSelected

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

      boolean isSelectionEmpty()
      如果选择当前为空,则返回true。
      返回:
      选择当前是否为空
    • clearSelection

      void clearSelection()
      清空当前选择。如果这代表当前选择的更改,则会通知选择监听器。
    • setRowMapper

      void setRowMapper(RowMapper newMapper)
      设置RowMapper实例。此实例用于确定特定TreePath的行。
      参数:
      newMapper - 要设置的RowMapper
    • getRowMapper

      RowMapper getRowMapper()
      返回能够将TreePath映射到行的RowMapper实例。
      返回:
      能够将TreePath映射到行的RowMapper实例
    • getSelectionRows

      int[] getSelectionRows()
      返回当前所选行的所有行。如果没有选中TreePaths或未设置RowMapper,则将返回null(或空数组)。
      返回:
      当前所选行的所有行
    • getMinSelectionRow

      int getMinSelectionRow()
      返回当前所选TreePaths集合的RowMapper获取的最小值。如果没有选中任何内容,或者没有RowMapper,则将返回-1。
      返回:
      当前所选TreePaths集合的RowMapper获取的最小值
    • getMaxSelectionRow

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

      boolean isRowSelected(int row)
      如果标识为row的行被选中,则返回true。
      参数:
      row - 要检查的行
      返回:
      行是否被选中
    • resetRowSelection

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

      通常情况下不需要调用此方法;JTree及其相关的监听器会为您调用此方法。如果您正在实现自己的视图类,则需要调用此方法。

    • getLeadSelectionRow

      int getLeadSelectionRow()
      返回主选择索引。即最后添加的索引。
      返回:
      主选择索引
    • getLeadSelectionPath

      TreePath getLeadSelectionPath()
      返回最后添加的路径。这可能与JTree维护的leadSelectionPath属性不同。
      返回:
      最后添加的路径
    • addPropertyChangeListener

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

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

      参数:
      listener - 要添加的PropertyChangeListener
    • removePropertyChangeListener

      void removePropertyChangeListener(PropertyChangeListener listener)
      从监听器列表中移除PropertyChangeListener。这将移除为所有属性注册的PropertyChangeListener。
      参数:
      listener - 要移除的PropertyChangeListener
    • addTreeSelectionListener

      void addTreeSelectionListener(TreeSelectionListener x)
      将x添加到每次选定的TreePaths集合发生变化时通知的监听器列表中。
      参数:
      x - 要添加的新监听器
    • removeTreeSelectionListener

      void removeTreeSelectionListener(TreeSelectionListener x)
      从每次选定的TreePaths集合发生变化时通知的监听器列表中移除x。
      参数:
      x - 要移除的监听器