Package com.jidesoft.swing
Class SearchableBar
java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JToolBar
com.jidesoft.swing.SearchableBar
- All Implemented Interfaces:
SearchableProvider
,ImageObserver
,MenuContainer
,Serializable
,Accessible
,SwingConstants
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)
.
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interface
The installer for SearchableBar.Nested classes/interfaces inherited from class javax.swing.JToolBar
JToolBar.AccessibleJToolBar, JToolBar.Separator
Nested classes/interfaces inherited from class javax.swing.JComponent
JComponent.AccessibleJComponent
Nested classes/interfaces inherited from class java.awt.Container
Container.AccessibleAWTContainer
Nested classes/interfaces inherited from class java.awt.Component
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected AbstractButton
protected JComboBox
protected AbstractButton
protected AbstractButton
protected AbstractButton
protected JLabel
protected AbstractButton
protected AbstractButton
protected JLabel
protected JTextField
protected AbstractButton
static final String
static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
Fields inherited from class javax.swing.JComponent
listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
Fields inherited from class java.awt.Component
accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
Fields inherited from interface javax.swing.SwingConstants
BOTTOM, CENTER, EAST, HORIZONTAL, LEADING, LEFT, NEXT, NORTH, NORTH_EAST, NORTH_WEST, PREVIOUS, RIGHT, SOUTH, SOUTH_EAST, SOUTH_WEST, TOP, TRAILING, VERTICAL, WEST
-
Constructor Summary
ConstructorsConstructorDescriptionSearchableBar
(Searchable searchable) Creates a searchable bar.SearchableBar
(Searchable searchable, boolean compact) Creates a searchable bar in compact mode or full mode.SearchableBar
(Searchable searchable, String initialText, boolean compact) Creates a searchable bar with initial searching text and in compact mode or full mode. -
Method Summary
Modifier and TypeMethodDescriptionprotected AbstractButton
createCloseButton
(AbstractAction closeAction) Creates the close button.protected JComboBox
Creates the combo box where user types the text to be searched.protected AbstractButton
createFindNextButton
(AbstractAction findNextAction) Creates the find next button.protected AbstractButton
createFindPrevButton
(AbstractAction findPrevAction) Creates the find prev button.protected AbstractButton
Creates the highlight button.protected AbstractButton
Creates the match case button.protected AbstractButton
Creates the repeat button.protected JTextField
Creates the text field where user types the text to be searched.protected AbstractButton
Creates the whole words button.void
Makes the search field having focus.protected ImageIcon
getImageIcon
(String name) Gets the icons from SearchableBarIconsFactory.int
Gets the maximum search history length.Gets the background color when the searching text doesn't match with any of the elements in the component.protected String
getResourceString
(String key) Gets the localized string from resource bundle.Gets the underlying Searchable object.String[]
Gets the search history.Gets the searching text.int
static SearchableBar
install
(Searchable searchable, KeyStroke keyStroke, SearchableBar.Installer installer) Installs a SearchableBar on a component.protected void
Adds the buttons to the SearchableBar.boolean
Checks ifSearchableBar
is in compact mode.boolean
Get if the SearchableBar is highlighting all matches.boolean
Returns false.boolean
Gets the flag indicating if the match count should be displayed in the status label.void
protected void
void
setCompact
(boolean compact) Sets theSearchableBar
to compact or full mode.void
setHighlightAll
(boolean highlightAll) Set if the SearchableBar will highlight all matches.void
setInstaller
(SearchableBar.Installer installer) Sets the installer.void
setMaxHistoryLength
(int maxHistoryLength) Sets the maximum search history length.void
setMismatchForeground
(Color mismatchBackground) Sets the background for mismatch.void
setSearchHistory
(String[] searchHistory) Sets the search history.void
setSearchingText
(String searchingText) Sets the searching text.void
setShowMatchCount
(boolean showMatchCount) Sets the flag indicating if the match count should be displayed in the status label.void
setVisibleButtons
(int visibleButtons) Sets visible buttons onSearchableBar
.Methods inherited from class javax.swing.JToolBar
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
Methods inherited from class javax.swing.JComponent
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
Methods inherited from class java.awt.Container
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
Methods inherited from class java.awt.Component
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, 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, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
-
Field Details
-
_statusLabel
-
_leadingLabel
-
_textField
-
_comboBox
-
_closeButton
-
_findPrevButton
-
_findNextButton
-
_highlightsButton
-
_matchCaseCheckBox
-
_wholeWordsCheckBox
-
_repeatCheckBox
-
SHOW_CLOSE
public static final int SHOW_CLOSE- See Also:
-
SHOW_NAVIGATION
public static final int SHOW_NAVIGATION- See Also:
-
SHOW_HIGHLIGHTS
public static final int SHOW_HIGHLIGHTS- See Also:
-
SHOW_MATCHCASE
public static final int SHOW_MATCHCASE- See Also:
-
SHOW_REPEATS
public static final int SHOW_REPEATS- See Also:
-
SHOW_STATUS
public static final int SHOW_STATUS- See Also:
-
SHOW_WHOLE_WORDS
public static final int SHOW_WHOLE_WORDS- See Also:
-
SHOW_ALL
public static final int SHOW_ALL- See Also:
-
PROPERTY_MAX_HISTORY_LENGTH
- See Also:
-
-
Constructor Details
-
SearchableBar
Creates a searchable bar.- Parameters:
searchable
- the searchable
-
SearchableBar
Creates a searchable bar in compact mode or full mode.- Parameters:
searchable
- the searchablecompact
- the flag indicating compact mode or full mode
-
SearchableBar
Creates a searchable bar with initial searching text and in compact mode or full mode.- Parameters:
searchable
- the searchableinitialText
- the initial textcompact
- the flag indicating compact mode or full mode
-
-
Method Details
-
createTextField
Creates the text field where user types the text to be searched.- Returns:
- a text field.
-
createComboBox
Creates the combo box where user types the text to be searched.- Returns:
- a combo box.
- Since:
- 3.4.1
-
getSearchable
Gets the underlying Searchable object.- Returns:
- the Searchable object.
-
createCloseButton
Creates the close button. Subclass can override it to create your own close button.- Parameters:
closeAction
- the close action- Returns:
- the close button.
-
createFindNextButton
Creates the find next button. Subclass can override it to create your own find next button.- Parameters:
findNextAction
- the find next action- Returns:
- the find next button.
-
createFindPrevButton
Creates the find prev button. Subclass can override it to create your own find prev button.- Parameters:
findPrevAction
- the find previous action- Returns:
- the find prev button.
-
createHighlightButton
Creates the highlight button.- Returns:
- the highlight button.
-
createRepeatsButton
Creates the repeat button. By default it will return a JCheckBox. Subclass class can override it to return your own button or customize the button created by default as long as it can set underlying Searchable's repeats property.- Returns:
- the repeat button.
-
createMatchCaseButton
Creates the match case button. By default it will return a JCheckBox. Subclass class can override it to return your own button or customize the button created by default as long as it can set underlying Searchable's caseSensitive property.- Returns:
- the match case button.
-
createWholeWordsButton
Creates the whole words button. By default it will return a JCheckBox. Subclass class can override it to return your own button or customize the button created by default as long as it can set underlying Searchable's toEnd property.- Returns:
- the whole words button.
- Since:
- 3.5.2
-
installComponents
protected void installComponents()Adds the buttons to the SearchableBar. Subclass can override this method to rearrange the layout of those buttons. -
isHighlightAll
public boolean isHighlightAll()Get if the SearchableBar is highlighting all matches. Even you set it to true, after the customer press previous or next button, this flag will be cleared.- Returns:
- true if all matches are highlighted. Otherwise false.
-
setHighlightAll
public void setHighlightAll(boolean highlightAll) Set if the SearchableBar will highlight all matches.- Parameters:
highlightAll
- the flag- See Also:
-
focusSearchField
public void focusSearchField()Makes the search field having focus. -
select
-
getSearchingText
Gets the searching text.- Specified by:
getSearchingText
in interfaceSearchableProvider
- Returns:
- the searching text.
-
setSearchingText
Sets the searching text.- Parameters:
searchingText
- the new searching text.
-
isPassive
public boolean isPassive()Returns false.- Specified by:
isPassive
in interfaceSearchableProvider
- Returns:
- false.
-
setMismatchForeground
Sets the background for mismatch.- Parameters:
mismatchBackground
- the mismatch background
-
getMismatchBackground
Gets the background color when the searching text doesn't match with any of the elements in the component.- Returns:
- the foreground color for mismatch. If you never call
setMismatchForeground(java.awt.Color)
. red color will be used.
-
getSearchHistory
Gets the search history.- Returns:
- the search history.
- Since:
- 3.4.1
-
setSearchHistory
Sets the search history.- Parameters:
searchHistory
- the search history- Since:
- 3.4.1
-
getMaxHistoryLength
public int getMaxHistoryLength()Gets the maximum search history length.- Returns:
- the maximum search history length.
- Since:
- 3.4.1
-
setMaxHistoryLength
public void setMaxHistoryLength(int maxHistoryLength) Sets the maximum search history length. By default, it's 0, which means there is no history to shown to keep the behavior backward compatibility. To show history with a JComboBox, please use this method to set a positive or negative value. Any negative value means that the history size is unlimited.- Parameters:
maxHistoryLength
- the maximum history length- Since:
- 3.4.1
-
isShowMatchCount
public boolean isShowMatchCount()Gets the flag indicating if the match count should be displayed in the status label.- Returns:
- true if the match count should be displayed. Otherwise false.
- Since:
- 3.5.2
- See Also:
-
setShowMatchCount
public void setShowMatchCount(boolean showMatchCount) Sets the flag indicating if the match count should be displayed in the status label. By default, the flag is set to false to keep the original behavior.- Parameters:
showMatchCount
-- Since:
- 3.5.2
-
getInstaller
-
setInstaller
Sets the installer. Installer is responsible for the installation and uninstallation of SearchableBar.- Parameters:
installer
- the installer
-
install
public static SearchableBar install(Searchable searchable, KeyStroke keyStroke, SearchableBar.Installer installer) Installs a SearchableBar on a component. This is just a convenient method for you, you can install it in your own code. See below for the actual code we used in this method.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;
- Parameters:
searchable
- the searchablekeyStroke
- the key strokeinstaller
- the installer- Returns:
- the SearchableBar that is created.
-
processKeyEvent
- Specified by:
processKeyEvent
in interfaceSearchableProvider
- Overrides:
processKeyEvent
in classJComponent
-
getVisibleButtons
public int getVisibleButtons() -
setVisibleButtons
public void setVisibleButtons(int visibleButtons) Sets visible buttons onSearchableBar
.- Parameters:
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_WHOLE_WORDS
- word only button -
SHOW_REPEATS
- repeats button -
SHOW_STATUS
- status area -
SHOW_ALL
- all buttons
setVisibleButtons(SearchableBar.SHOW_CLOSE | SearchableBar.SHOW_HIGHLIGHTS)
.-
-
isCompact
public boolean isCompact()Checks ifSearchableBar
is in compact mode.- Returns:
- true if in compact. Otherwise, false.
-
setCompact
public void setCompact(boolean compact) Sets theSearchableBar
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.- Parameters:
compact
- the flag
-
getImageIcon
Gets the icons from SearchableBarIconsFactory. Subclass can override this method if they want to provide their own icon.- Parameters:
name
- the icon name- Returns:
- the icon of the specified name.
-
getResourceString
Gets the localized string from resource bundle. Subclass can override it to provide its own string. Available keys are defined in swing.properties that begin with "SearchableBar.".- Parameters:
key
- the resource key- Returns:
- the localized string.
-