public class TreeSearchable extends Searchable implements javax.swing.event.TreeModelListener, java.beans.PropertyChangeListener
TreeSearchable
is an concrete implementation of Searchable
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
Now the JTree will have the search function.
JTree tree = ....;
TreeSearchable searchable = new TreeSearchable(tree);
JTree tree = ....;
TreeSearchable searchable = new TreeSearchable(tree) {
protected String convertElementToString(Object object) {
...
}
};
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 = new JTree(...) {
public TreePath getNextMatch(String prefix, int startingRow, Position.Bias bias) {
return null;
}
};
Searchable.SearchField, Searchable.SearchPopup
_component, _componentListener, _focusListener, _keyListener, CLIENT_PROPERTY_SEARCHABLE, listenerList, PROPERTY_SEARCH_TEXT
Constructor and Description |
---|
TreeSearchable(javax.swing.JTree tree) |
Modifier and Type | Method and 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.
|
addPropertyChangeListener, addSearchableListener, adjustSelectedIndex, compare, compare, createComponentListener, createFocusListener, createKeyListener, createSearchPopup, findFirst, findFromCursor, findLast, findNext, findPrevious, firePropertyChangeEvent, fireSearchableEvent, getBackground, getComponent, getCurrentIndex, getCursor, getForeground, getMismatchForeground, getPopupLocation, getPopupLocationRelativeTo, getResourceString, getSearchable, getSearchableListeners, getSearchableProvider, getSearchingDelay, getSearchingText, getSearchLabel, getWildcardSupport, hidePopup, installListeners, isActivateKey, isCaseSensitive, isDeactivateKey, isFindFirstKey, isFindLastKey, isFindNextKey, isFindPreviousKey, isFromStart, isHeavyweightComponentEnabled, isIncrementalSelectKey, isNavigationKey, isPopupVisible, isProcessModelChangeEvent, isRepeats, isReverseOrder, isSelectAllKey, isWildcardEnabled, keyTypedOrPressed, removePropertyChangeListener, removeSearchableListener, reverseFindFromCursor, setBackground, setCaseSensitive, setCursor, setCursor, setForeground, setFromStart, setHeavyweightComponentEnabled, setMismatchForeground, setPopupLocation, setPopupLocationRelativeTo, setProcessModelChangeEvent, setRepeats, setReverseOrder, setSearchableProvider, setSearchingDelay, setSearchLabel, setWildcardEnabled, setWildcardSupport, showPopup
public boolean isRecursive()
public void setRecursive(boolean recursive)
recursive
- the attributepublic void uninstallListeners()
Searchable
uninstallListeners
in class Searchable
protected void setSelectedIndex(int index, boolean incremental)
Searchable
setSelectedIndex
in class Searchable
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.protected int getSelectedIndex()
Searchable
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).
getSelectedIndex
in class Searchable
protected java.lang.Object getElementAt(int index)
Searchable
getElementAt
in class Searchable
index
- the indexprotected int getElementCount()
Searchable
getElementCount
in class Searchable
protected void populateTreePaths()
protected void resetTreePathes()
protected java.util.List<javax.swing.tree.TreePath> getTreePathes()
protected java.lang.String convertElementToString(java.lang.Object object)
toString()
of the last path component in the TreePath.convertElementToString
in class Searchable
object
- the object to be convertedpublic void treeNodesChanged(javax.swing.event.TreeModelEvent e)
treeNodesChanged
in interface javax.swing.event.TreeModelListener
public void treeNodesInserted(javax.swing.event.TreeModelEvent e)
treeNodesInserted
in interface javax.swing.event.TreeModelListener
public void treeNodesRemoved(javax.swing.event.TreeModelEvent e)
treeNodesRemoved
in interface javax.swing.event.TreeModelListener
public void treeStructureChanged(javax.swing.event.TreeModelEvent e)
treeStructureChanged
in interface javax.swing.event.TreeModelListener
public void propertyChange(java.beans.PropertyChangeEvent evt)
propertyChange
in interface java.beans.PropertyChangeListener