public class SearchableBar extends javax.swing.JToolBar implements SearchableProvider
SearchableBar
is a convenient component to enable searching feature for components. As long as the
component support Searchable
feature, it can work with SearchableBar
.
Different from Searchable
feature which uses a small popup window to allow user typing in the searching
text, SearchableBar
provides a full-size panel. Although they both pretty provide the same set of
features, they should be used in different cases to achieve the most desirable result.
First of all, SearchableBar
is a lot bigger than Searchable
's popup and need more space on
the screen. The component that installs SearchableBar
should be large enough. In comparison,
Searchable
can be installed on components of any size as it's a floating popup.
Secondly, SearchableBar
can be set visible all the time or can be set visible by a keystroke and stay
visible unless user explicitly hides it. If your user is not computer savvy, SearchableBar
is more
appropriate because user can see searching feature very easily. SearchableBar
can also be a better
replacement the traditional "Find" or "Search" dialog because SearchableBar
doesn't block user input
like modal dialog. In comparison, Searchable
's popup is very transient. Mouse clicks outside the popup
will hide the popup. For computer savvy it is very helpful but it could be hard for non-computer savvy to
"understand" it. A good example is IntelliJ IDEA heavily uses Searchable popup because the users are all Java
developers. Firefox, on the other hand, uses SearchableBar because the users are just regular computer users.
Although appearance wise, these two are very different, they both based on Searchable
interface. So as
developer, both are almost the same. SearchableBar
based on Searchable
. So if you have an
interface of Searchable
, all you need is to call
SearchableBar.install(searchable, KeyStroke.getKeyStroke(KeyEvent.VK_F,
KeyEvent.CTRL_DOWN_MASK),
new SearchableBar.Installer() {
public void openSearchBar(SearchableBar searchableBar) {
// add code to show search bar
}
public void closeSearchBar(SearchableBar searchableBar) {
// add code to close search bar
}
});
Or if you want fully control the SearchableBar, you can create one using one of its constructors and add to wherever
you want.
There are a few options you can set on SearchableBar
. You can set compact or full mode. Compact mode
will only use icon for buttons v.s. full mode will use both icon and text for buttons. All buttons on the
SearchableBar
can be shown/hidden by using setVisibleButtons(int)
method. You can also set the
text field background for mismatch by using setMismatchForeground(java.awt.Color)
.
Modifier and Type | Class and Description |
---|---|
static interface |
SearchableBar.Installer
The installer for SearchableBar.
|
javax.swing.JToolBar.AccessibleJToolBar, javax.swing.JToolBar.Separator
javax.swing.JComponent.AccessibleJComponent
Modifier and Type | Field and Description |
---|---|
protected javax.swing.AbstractButton |
_closeButton |
protected javax.swing.AbstractButton |
_findNextButton |
protected javax.swing.AbstractButton |
_findPrevButton |
protected javax.swing.AbstractButton |
_highlightsButton |
static int |
SHOW_ALL |
static int |
SHOW_CLOSE |
static int |
SHOW_HIGHLIGHTS |
static int |
SHOW_MATCHCASE |
static int |
SHOW_NAVIGATION |
static int |
SHOW_REPEATS |
static int |
SHOW_STATUS |
listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
Constructor and Description |
---|
SearchableBar(Searchable searchable)
Creates a searchable bar.
|
SearchableBar(Searchable searchable,
boolean compact)
Creates a searchable bar in compact mode or full mode.
|
SearchableBar(Searchable searchable,
java.lang.String initialText,
boolean compact)
Creates a searchable bar with initial searching text and in compact mode or full mode.
|
Modifier and Type | Method and Description |
---|---|
protected javax.swing.AbstractButton |
createCloseButton(javax.swing.AbstractAction closeAction)
Creates the close button.
|
protected javax.swing.AbstractButton |
createFindNextButton(javax.swing.AbstractAction findNextAction)
Creates the find next button.
|
protected javax.swing.AbstractButton |
createFindPrevButton(javax.swing.AbstractAction findPrevAction)
Creates the find prev button.
|
protected javax.swing.AbstractButton |
createHighlightButton()
Creates the highlight button.
|
protected javax.swing.AbstractButton |
createMatchCaseButton()
Creates the match case button.
|
protected javax.swing.AbstractButton |
createRepeatsButton()
Creates the repeat button.
|
protected javax.swing.JTextField |
createTextField()
Creates the text field where user types the text to be searched.
|
void |
focusSearchField()
Makes the search field having focus.
|
protected javax.swing.ImageIcon |
getImageIcon(java.lang.String name)
Gets the icons from SearchableBarIconsFactory.
|
SearchableBar.Installer |
getInstaller() |
java.awt.Color |
getMismatchBackground()
Gets the background color when the searching text doesn't match with any of the elements in the component.
|
protected java.lang.String |
getResourceString(java.lang.String key)
Gets the localized string from resource bundle.
|
Searchable |
getSearchable()
Gets the underlying Searchable object.
|
java.lang.String |
getSearchingText()
Gets the searching text.
|
int |
getVisibleButtons() |
static SearchableBar |
install(Searchable searchable,
javax.swing.KeyStroke keyStroke,
SearchableBar.Installer installer)
Installs a SearchableBar on a component.
|
protected void |
installComponents()
Adds the buttons to the SearchableBar.
|
boolean |
isCompact()
Checks if
SearchableBar is in compact mode. |
boolean |
isPassive()
Returns false.
|
void |
processKeyEvent(java.awt.event.KeyEvent e) |
protected void |
select(int index,
java.lang.String searchingText,
boolean incremental) |
void |
setCompact(boolean compact)
Sets the
SearchableBar to compact or full mode. |
void |
setInstaller(SearchableBar.Installer installer)
Sets the installer.
|
void |
setMismatchForeground(java.awt.Color mismatchBackground)
Sets the background for mismatch.
|
void |
setSearchingText(java.lang.String searchingText)
Sets the searching text.
|
void |
setVisibleButtons(int visibleButtons)
Sets visible buttons on
SearchableBar . |
add, addImpl, addSeparator, addSeparator, createActionChangeListener, createActionComponent, getAccessibleContext, getComponentAtIndex, getComponentIndex, getMargin, getOrientation, getUI, getUIClassID, isBorderPainted, isFloatable, isRollover, paintBorder, paramString, setBorderPainted, setFloatable, setLayout, setMargin, setOrientation, setRollover, setUI, updateUI
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
add, add, add, add, add, addContainerListener, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, transferFocusDownCycle, validate, validateTree
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
protected javax.swing.AbstractButton _closeButton
protected javax.swing.AbstractButton _findPrevButton
protected javax.swing.AbstractButton _findNextButton
protected javax.swing.AbstractButton _highlightsButton
public static final int SHOW_CLOSE
public static final int SHOW_NAVIGATION
public static final int SHOW_HIGHLIGHTS
public static final int SHOW_MATCHCASE
public static final int SHOW_REPEATS
public static final int SHOW_STATUS
public static final int SHOW_ALL
public SearchableBar(Searchable searchable)
searchable
- the searchablepublic SearchableBar(Searchable searchable, boolean compact)
searchable
- the searchablecompact
- the flag indicating compact mode or full modepublic SearchableBar(Searchable searchable, java.lang.String initialText, boolean compact)
searchable
- the searchableinitialText
- the initial textcompact
- the flag indicating compact mode or full modeprotected javax.swing.JTextField createTextField()
public Searchable getSearchable()
protected javax.swing.AbstractButton createCloseButton(javax.swing.AbstractAction closeAction)
closeAction
- the close actionprotected javax.swing.AbstractButton createFindNextButton(javax.swing.AbstractAction findNextAction)
findNextAction
- the find next actionprotected javax.swing.AbstractButton createFindPrevButton(javax.swing.AbstractAction findPrevAction)
findPrevAction
- the find previous actionprotected javax.swing.AbstractButton createHighlightButton()
protected javax.swing.AbstractButton createRepeatsButton()
protected javax.swing.AbstractButton createMatchCaseButton()
protected void installComponents()
public void focusSearchField()
protected void select(int index, java.lang.String searchingText, boolean incremental)
public java.lang.String getSearchingText()
getSearchingText
in interface SearchableProvider
public void setSearchingText(java.lang.String searchingText)
searchingText
- the new searching text.public boolean isPassive()
isPassive
in interface SearchableProvider
public void setMismatchForeground(java.awt.Color mismatchBackground)
mismatchBackground
- the mismatch backgroundpublic java.awt.Color getMismatchBackground()
setMismatchForeground(java.awt.Color)
. red
color will be used.public SearchableBar.Installer getInstaller()
public void setInstaller(SearchableBar.Installer installer)
installer
- the installerpublic static SearchableBar install(Searchable searchable, javax.swing.KeyStroke keyStroke, SearchableBar.Installer installer)
final SearchableBar searchableBar = new SearchableBar(searchable);
searchableBar.setInstaller(installer);
((JComponent) searchable.getComponent()).registerKeyboardAction(new AbstractAction() {
public void actionPerformed(ActionEvent e) {
searchableBar.getInstaller().openSearchBar(searchableBar);
searchableBar.focusSearchField();
}
}, keyStroke, JComponent.WHEN_FOCUSED);
return searchableBar;
searchable
- the searchablekeyStroke
- the key strokeinstaller
- the installerpublic void processKeyEvent(java.awt.event.KeyEvent e)
processKeyEvent
in interface SearchableProvider
processKeyEvent
in class javax.swing.JComponent
public int getVisibleButtons()
public void setVisibleButtons(int visibleButtons)
SearchableBar
.visibleButtons
- bit-wise all of several constants. Valid constants are SHOW_CLOSE
- the
close button SHOW_NAVIGATION
- the find next and find previous buttons SHOW_HIGHLIGHTS
- highlights all button SHOW_MATCHCASE
- match case
button SHOW_REPEATS
- repeats button SHOW_STATUS
- status area
SHOW_ALL
- all buttons setVisibleButtons(SearchableBar.SHOW_CLOSE |
SearchableBar.SHOW_HIGHLIGHTS)
.public boolean isCompact()
SearchableBar
is in compact mode.public void setCompact(boolean compact)
SearchableBar
to compact or full mode. In compact mode will only use icon for buttons v.s.
full mode will use both icon and text for buttons.compact
- the flagprotected javax.swing.ImageIcon getImageIcon(java.lang.String name)
name
- the icon nameprotected java.lang.String getResourceString(java.lang.String key)
key
- the resource key