Package com.jidesoft.swing
Class TreeSearchable
- java.lang.Object
-
- com.jidesoft.swing.Searchable
-
- com.jidesoft.swing.TreeSearchable
-
- All Implemented Interfaces:
java.beans.PropertyChangeListener
,java.util.EventListener
,javax.swing.event.TreeModelListener
public class TreeSearchable extends Searchable implements javax.swing.event.TreeModelListener, java.beans.PropertyChangeListener
TreeSearchable
is an concrete implementation ofSearchable
that enables the search function in JTree.It's very simple to use it. Assuming you have a JTree, all you need to do is to call
There is very little customization you need to do to TreeSearchable. The only thing you might need is when the element in the JTree needs a special conversion to convert to string. If so, you can override convertElementToString() to provide you own algorithm to do the conversion.
Now the JTree will have the search function.JTree tree = ....; TreeSearchable searchable = new TreeSearchable(tree);
Additional customization can be done on the base Searchable class such as background and foreground color, keystrokes, case sensitivity. JTree actually has a simple searchable feature but has flaws. It will affect our searchable feature. To workaround it, you can override getNextMatch method and always return -1 when you create your JList.JTree tree = ....; TreeSearchable searchable = new TreeSearchable(tree) { protected String convertElementToString(Object object) { ... } };
JTree tree = new JTree(...) { public TreePath getNextMatch(String prefix, int startingRow, Position.Bias bias) { return null; } };
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class com.jidesoft.swing.Searchable
Searchable.DefaultSearchPopup, Searchable.SearchField, Searchable.SearchPopup
-
-
Field Summary
-
Fields inherited from class com.jidesoft.swing.Searchable
_component, _componentListener, _focusListener, _keyListener, _matchCount, CLIENT_PROPERTY_SEARCHABLE, listenerList, PROPERTY_SEARCH_TEXT
-
-
Constructor Summary
Constructors Constructor Description TreeSearchable(javax.swing.JTree tree)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected java.lang.String
convertElementToString(java.lang.Object object)
Converts the element in JTree to string.protected java.lang.Object
getElementAt(int index)
Gets the element at the specified index.protected int
getElementCount()
Gets the total element count in the component.protected int
getSelectedIndex()
Gets the selected index in the component.protected java.util.List<javax.swing.tree.TreePath>
getTreePathes()
Gets the cached tree paths list.boolean
isRecursive()
Checks if the searchable is recursive.protected void
populateTreePaths()
Recursively go through the tree to populate the tree paths into a list and cache them.void
propertyChange(java.beans.PropertyChangeEvent evt)
protected void
resetTreePathes()
Reset the cached tree paths list.void
setRecursive(boolean recursive)
Sets the recursive attribute.protected void
setSelectedIndex(int index, boolean incremental)
Sets the selected index.void
treeNodesChanged(javax.swing.event.TreeModelEvent e)
void
treeNodesInserted(javax.swing.event.TreeModelEvent e)
void
treeNodesRemoved(javax.swing.event.TreeModelEvent e)
void
treeStructureChanged(javax.swing.event.TreeModelEvent e)
void
uninstallListeners()
Uninstall the listeners that installed before.-
Methods inherited from class com.jidesoft.swing.Searchable
addPropertyChangeListener, addSearchableListener, adjustSelectedIndex, cancelHighlightAll, compare, compare, convertToString, createComponentListener, createFocusListener, createKeyListener, createSearchPopup, findAll, findFirst, findFirstExactly, findFromCursor, findLast, findNext, findPrevious, firePropertyChangeEvent, fireSearchableEvent, getBackground, getComponent, getCurrentIndex, getCursor, getElementAtAsString, getForeground, getMismatchForeground, getPopupLocation, getPopupLocationRelativeTo, getPopupTimeout, getResourceString, getSearchable, getSearchableListeners, getSearchableProvider, getSearchingDelay, getSearchingText, getSearchLabel, getWildcardSupport, hidePopup, highlightAll, installListeners, isActivateKey, isCaseSensitive, isCountMatch, isDeactivateKey, isFindFirstKey, isFindLastKey, isFindNextKey, isFindPreviousKey, isFromStart, isHeavyweightComponentEnabled, isHideSearchPopupOnEvent, isIncrementalSelectKey, isNavigationKey, isPopupVisible, isProcessModelChangeEvent, isRepeats, isReverseOrder, isSearchableListenerInstalled, isSelectAllKey, isWildcardEnabled, keyTypedOrPressed, removePropertyChangeListener, removeSearchableListener, reverseFindFromCursor, searchingTextEmpty, select, setBackground, setCaseSensitive, setCountMatch, setCursor, setCursor, setForeground, setFromStart, setHeavyweightComponentEnabled, setHideSearchPopupOnEvent, setMismatchForeground, setPopupLocation, setPopupLocationRelativeTo, setPopupTimeout, setProcessModelChangeEvent, setRepeats, setReverseOrder, setSearchableProvider, setSearchingDelay, setSearchLabel, setWildcardEnabled, setWildcardSupport, showPopup, textChanged
-
-
-
-
Method Detail
-
isRecursive
public boolean isRecursive()
Checks if the searchable is recursive.- Returns:
- true if searchable is recursive.
-
setRecursive
public void setRecursive(boolean recursive)
Sets the recursive attribute. If TreeSearchable is recursive, it will consider all tree nodes including those which are not visible to find the matching node. Obviously, if your tree has unlimited number of tree nodes or a potential huge number of tree nodes (such as a tree to represent file system), the recursive attribute should be false. To avoid this potential problem in this case, we default it to false.- Parameters:
recursive
- the attribute
-
uninstallListeners
public void uninstallListeners()
Description copied from class:Searchable
Uninstall the listeners that installed before. This method is never called because we don't have the control of the life cycle of the component. However you can call this method if you don't want the component to be searchable any more.- Overrides:
uninstallListeners
in classSearchable
-
setSelectedIndex
protected void setSelectedIndex(int index, boolean incremental)
Description copied from class:Searchable
Sets the selected index. The concrete implementation should call methods on the component to select the element at the specified index. The incremental flag is used to do multiple select. If the flag is true, the element at the index should be added to current selection. If false, you should clear previous selection and then select the element.- Specified by:
setSelectedIndex
in classSearchable
- Parameters:
index
- the index to be selectedincremental
- a flag to enable multiple selection. If the flag is true, the element at the index should be added to current selection. If false, you should clear previous selection and then select the element.
-
getSelectedIndex
protected int getSelectedIndex()
Description copied from class:Searchable
Gets the selected index in the component. The concrete implementation should call methods on the component to retrieve the current selected index. If the component supports multiple selection, it's OK just return the index of the first selection.Here are some examples. In the case of JList, the index is the row index. In the case of JTree, the index is the row index too. In the case of JTable, depending on the selection mode, the index could be row index (in row selection mode), could be column index (in column selection mode) or could the cell index (in cell selection mode).
- Specified by:
getSelectedIndex
in classSearchable
- Returns:
- the selected index.
-
getElementAt
protected java.lang.Object getElementAt(int index)
Description copied from class:Searchable
Gets the element at the specified index. The element could be any data structure that internally used in the component. The convertElementToString method will give you a chance to convert the element to string which is used to compare with the string that user types in.- Specified by:
getElementAt
in classSearchable
- Parameters:
index
- the index- Returns:
- the element at the specified index.
-
getElementCount
protected int getElementCount()
Description copied from class:Searchable
Gets the total element count in the component. Different concrete implementation could have different interpretation of the count. This is totally OK as long as it's consistent in all the methods. For example, the index parameter in other methods should be always a valid value within the total count.- Specified by:
getElementCount
in classSearchable
- Returns:
- the total element count.
-
populateTreePaths
protected void populateTreePaths()
Recursively go through the tree to populate the tree paths into a list and cache them. Tree paths list is only used when recursive attribute is true.
-
resetTreePathes
protected void resetTreePathes()
Reset the cached tree paths list. Tree paths list is only used when recursive atattributes true.
-
getTreePathes
protected java.util.List<javax.swing.tree.TreePath> getTreePathes()
Gets the cached tree paths list. If it has never been cached before, this method will create the cache. Tree paths list is only used when recursive atattributes true.- Returns:
- the tree paths list.
-
convertElementToString
protected java.lang.String convertElementToString(java.lang.Object object)
Converts the element in JTree to string. The element by default is TreePath. The returned value will betoString()
of the last path component in the TreePath.- Specified by:
convertElementToString
in classSearchable
- Parameters:
object
- the object to be converted- Returns:
- the string representing the TreePath in the JTree.
-
treeNodesChanged
public void treeNodesChanged(javax.swing.event.TreeModelEvent e)
- Specified by:
treeNodesChanged
in interfacejavax.swing.event.TreeModelListener
-
treeNodesInserted
public void treeNodesInserted(javax.swing.event.TreeModelEvent e)
- Specified by:
treeNodesInserted
in interfacejavax.swing.event.TreeModelListener
-
treeNodesRemoved
public void treeNodesRemoved(javax.swing.event.TreeModelEvent e)
- Specified by:
treeNodesRemoved
in interfacejavax.swing.event.TreeModelListener
-
treeStructureChanged
public void treeStructureChanged(javax.swing.event.TreeModelEvent e)
- Specified by:
treeStructureChanged
in interfacejavax.swing.event.TreeModelListener
-
propertyChange
public void propertyChange(java.beans.PropertyChangeEvent evt)
- Specified by:
propertyChange
in interfacejava.beans.PropertyChangeListener
-
-