/* |
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. |
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
|
* |
|
* This code is free software; you can redistribute it and/or modify it |
|
* under the terms of the GNU General Public License version 2 only, as |
|
* published by the Free Software Foundation. Oracle designates this |
|
* particular file as subject to the "Classpath" exception as provided |
|
* by Oracle in the LICENSE file that accompanied this code. |
|
* |
|
* This code is distributed in the hope that it will be useful, but WITHOUT |
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
* version 2 for more details (a copy is included in the LICENSE file that |
|
* accompanied this code). |
|
* |
|
* You should have received a copy of the GNU General Public License version |
|
* 2 along with this work; if not, write to the Free Software Foundation, |
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
* |
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
|
* or visit www.oracle.com if you need additional information or have any |
|
* questions. |
|
*/ |
|
package javax.swing.tree; |
|
import javax.swing.event.*; |
|
import java.beans.PropertyChangeListener; |
|
/** |
|
* This interface represents the current state of the selection for |
|
* the tree component. |
|
* For information and examples of using tree selection models, |
|
* see <a href="https://docs.oracle.com/javase/tutorial/uiswing/components/tree.html">How to Use Trees</a> |
|
* in <em>The Java Tutorial.</em> |
|
* |
|
* <p> |
|
* 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 <code>getSelectionRows</code> |
|
* will return null. |
|
* |
|
* <p> |
|
* |
|
* A TreeSelectionModel can be configured to allow only one |
|
* path (<code>SINGLE_TREE_SELECTION</code>) a number of |
|
* contiguous paths (<code>CONTIGUOUS_TREE_SELECTION</code>) or a number of |
|
* discontiguous paths (<code>DISCONTIGUOUS_TREE_SELECTION</code>). |
|
* A <code>RowMapper</code> is used to determine if TreePaths are |
|
* contiguous. |
|
* In the absence of a RowMapper <code>CONTIGUOUS_TREE_SELECTION</code> and |
|
* <code>DISCONTIGUOUS_TREE_SELECTION</code> behave the same, that is they |
|
* allow any number of paths to be contained in the TreeSelectionModel. |
|
* |
|
* <p> |
|
* |
|
* For a selection model of <code>CONTIGUOUS_TREE_SELECTION</code> any |
|
* time the paths are changed (<code>setSelectionPath</code>, |
|
* <code>addSelectionPath</code> ...) the TreePaths are again checked to |
|
* make they are contiguous. A check of the TreePaths can also be forced |
|
* by invoking <code>resetRowSelection</code>. How a set of discontiguous |
|
* TreePaths is mapped to a contiguous set is left to implementors of |
|
* this interface to enforce a particular policy. |
|
* |
|
* <p> |
|
* |
|
* Implementations should combine duplicate TreePaths that are |
|
* added to the selection. For example, the following code |
|
* <pre> |
|
* TreePath[] paths = new TreePath[] { treePath, treePath }; |
|
* treeSelectionModel.setSelectionPaths(paths); |
|
* </pre> |
|
* should result in only one path being selected: |
|
* <code>treePath</code>, and |
|
* not two copies of <code>treePath</code>. |
|
* |
|
* <p> |
|
* |
|
* 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 |
|
*/ |
|
public interface TreeSelectionModel |
|
{ |
|
/** Selection can only contain one path at a time. */ |
|
public static final int SINGLE_TREE_SELECTION = 1; |
|
/** Selection can only be contiguous. This will only be enforced if |
|
* a RowMapper instance is provided. That is, if no RowMapper is set |
|
* this behaves the same as DISCONTIGUOUS_TREE_SELECTION. */ |
|
public static final int CONTIGUOUS_TREE_SELECTION = 2; |
|
/** Selection can contain any number of items that are not necessarily |
|
* contiguous. */ |
|
public static final int DISCONTIGUOUS_TREE_SELECTION = 4; |
|
/** |
|
* Sets the selection model, which must be one of SINGLE_TREE_SELECTION, |
|
* CONTIGUOUS_TREE_SELECTION or DISCONTIGUOUS_TREE_SELECTION. |
|
* <p> |
|
* This may change the selection if the current selection is not valid |
|
* for the new mode. For example, if three TreePaths are |
|
* selected when the mode is changed to <code>SINGLE_TREE_SELECTION</code>, |
|
* only one TreePath will remain selected. It is up to the particular |
|
* implementation to decide what TreePath remains selected. |
|
*/ |
|
void setSelectionMode(int mode); |
|
/** |
|
* Returns the current selection mode, one of |
|
* <code>SINGLE_TREE_SELECTION</code>, |
|
* <code>CONTIGUOUS_TREE_SELECTION</code> or |
|
* <code>DISCONTIGUOUS_TREE_SELECTION</code>. |
|
*/ |
|
int getSelectionMode(); |
|
/** |
|
* Sets the selection to path. If this represents a change, then |
|
* the TreeSelectionListeners are notified. If <code>path</code> is |
|
* null, this has the same effect as invoking <code>clearSelection</code>. |
|
* |
|
* @param path new path to select |
|
*/ |
|
void setSelectionPath(TreePath path); |
|
/** |
|
* Sets the selection to path. If this represents a change, then |
|
* the TreeSelectionListeners are notified. If <code>paths</code> is |
|
* null, this has the same effect as invoking <code>clearSelection</code>. |
|
* |
|
* @param paths new selection |
|
*/ |
|
void setSelectionPaths(TreePath[] paths); |
|
/** |
|
* Adds path to the current selection. If path is not currently |
|
* in the selection the TreeSelectionListeners are notified. This has |
|
* no effect if <code>path</code> is null. |
|
* |
|
* @param path the new path to add to the current selection |
|
*/ |
|
void addSelectionPath(TreePath path); |
|
/** |
|
* Adds paths to the current selection. If any of the paths in |
|
* paths are not currently in the selection the TreeSelectionListeners |
|
* are notified. This has |
|
* no effect if <code>paths</code> is null. |
|
* |
|
* @param paths the new paths to add to the current selection |
|
*/ |
|
void addSelectionPaths(TreePath[] paths); |
|
/** |
|
* Removes path from the selection. If path is in the selection |
|
* The TreeSelectionListeners are notified. This has no effect if |
|
* <code>path</code> is null. |
|
* |
|
* @param path the path to remove from the selection |
|
*/ |
|
void removeSelectionPath(TreePath path); |
|
/** |
|
* Removes paths from the selection. If any of the paths in |
|
* <code>paths</code> |
|
* are in the selection, the TreeSelectionListeners are notified. |
|
* This method has no effect if <code>paths</code> is null. |
|
* |
|
* @param paths the path to remove from the selection |
|
*/ |
|
void removeSelectionPaths(TreePath[] paths); |
|
/** |
|
* Returns the first path in the selection. How first is defined is |
|
* up to implementors, and may not necessarily be the TreePath with |
|
* the smallest integer value as determined from the |
|
* <code>RowMapper</code>. |
|
*/ |
|
TreePath getSelectionPath(); |
|
/** |
|
* Returns the paths in the selection. This will return null (or an |
|
* empty array) if nothing is currently selected. |
|
*/ |
|
TreePath[] getSelectionPaths(); |
|
/** |
|
* Returns the number of paths that are selected. |
|
*/ |
|
int getSelectionCount(); |
|
/** |
|
* Returns true if the path, <code>path</code>, is in the current |
|
* selection. |
|
*/ |
|
boolean isPathSelected(TreePath path); |
|
/** |
|
* Returns true if the selection is currently empty. |
|
*/ |
|
boolean isSelectionEmpty(); |
|
/** |
|
* Empties the current selection. If this represents a change in the |
|
* current selection, the selection listeners are notified. |
|
*/ |
|
void clearSelection(); |
|
/** |
|
* Sets the RowMapper instance. This instance is used to determine |
|
* the row for a particular TreePath. |
|
*/ |
|
void setRowMapper(RowMapper newMapper); |
|
/** |
|
* Returns the RowMapper instance that is able to map a TreePath to a |
|
* row. |
|
*/ |
|
RowMapper getRowMapper(); |
|
/** |
|
* Returns all of the currently selected rows. This will return |
|
* null (or an empty array) if there are no selected TreePaths or |
|
* a RowMapper has not been set. |
|
*/ |
|
int[] getSelectionRows(); |
|
/** |
|
* Returns the smallest value obtained from the RowMapper for the |
|
* current set of selected TreePaths. If nothing is selected, |
|
* or there is no RowMapper, this will return -1. |
|
*/ |
|
int getMinSelectionRow(); |
|
/** |
|
* Returns the largest value obtained from the RowMapper for the |
|
* current set of selected TreePaths. If nothing is selected, |
|
* or there is no RowMapper, this will return -1. |
|
*/ |
|
int getMaxSelectionRow(); |
|
/** |
|
* Returns true if the row identified by <code>row</code> is selected. |
|
*/ |
|
boolean isRowSelected(int row); |
|
/** |
|
* Updates this object's mapping from TreePaths to rows. This should |
|
* be invoked when the mapping from TreePaths to integers has changed |
|
* (for example, a node has been expanded). |
|
* <p> |
|
* You do not normally have to call this; JTree and its associated |
|
* listeners will invoke this for you. If you are implementing your own |
|
* view class, then you will have to invoke this. |
|
*/ |
|
void resetRowSelection(); |
|
/** |
|
* Returns the lead selection index. That is the last index that was |
|
* added. |
|
*/ |
|
int getLeadSelectionRow(); |
|
/** |
|
* Returns the last path that was added. This may differ from the |
|
* leadSelectionPath property maintained by the JTree. |
|
*/ |
|
TreePath getLeadSelectionPath(); |
|
/** |
|
* Adds a PropertyChangeListener to the listener list. |
|
* The listener is registered for all properties. |
|
* <p> |
|
* A PropertyChangeEvent will get fired when the selection mode |
|
* changes. |
|
* |
|
* @param listener the PropertyChangeListener to be added |
|
*/ |
|
void addPropertyChangeListener(PropertyChangeListener listener); |
|
/** |
|
* Removes a PropertyChangeListener from the listener list. |
|
* This removes a PropertyChangeListener that was registered |
|
* for all properties. |
|
* |
|
* @param listener the PropertyChangeListener to be removed |
|
*/ |
|
void removePropertyChangeListener(PropertyChangeListener listener); |
|
/** |
|
* Adds x to the list of listeners that are notified each time the |
|
* set of selected TreePaths changes. |
|
* |
|
* @param x the new listener to be added |
|
*/ |
|
void addTreeSelectionListener(TreeSelectionListener x); |
|
/** |
|
* Removes x from the list of listeners that are notified each time |
|
* the set of selected TreePaths changes. |
|
* |
|
* @param x the listener to remove |
|
*/ |
|
void removeTreeSelectionListener(TreeSelectionListener x); |
|
} |