Package org.jdesktop.swingx
Class JXSearchField
java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.text.JTextComponent
javax.swing.JTextField
org.jdesktop.swingx.JXTextField
org.jdesktop.swingx.JXSearchField
- All Implemented Interfaces:
ImageObserver
,MenuContainer
,Serializable
,Accessible
,Scrollable
,SwingConstants
A text field with a find icon in which the user enters text that identifies
items to search for.
JXSearchField almost looks and behaves like a native Windows Vista search
box, a Mac OS X search field, or a search field like the one used in Mozilla
Thunderbird 2.0 - depending on the current look and feel.
JXSearchField is a text field that contains a find button and a cancel
button. The find button normally displays a lens icon appropriate for the
current look and feel. The cancel button is used to clear the text and
therefore only visible when text is present. It normally displays a 'x' like
icon. Text can also be cleared, using the 'Esc' key.
The position of the find and cancel buttons can be customized by either
changing the search fields (text) margin or button margin, or by changing the
JXSearchField.LayoutStyle
.
JXSearchField supports two different search modes: JXSearchField.SearchMode.INSTANT
and JXSearchField.SearchMode.REGULAR
.
A search can be performed by registering an ActionListener
. The
ActionEvent
s command property contains the text to search for. The
search should be cancelled, when the command text is empty or null.- Author:
- Peter Weishapl petw@gmx.net
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionclass
Invoked when the find button is pressed.static enum
Defines, how the find and cancel button are layouted.static enum
Defines when action events are posted.Nested classes/interfaces inherited from class javax.swing.JTextField
JTextField.AccessibleJTextField
Nested classes/interfaces inherited from class javax.swing.text.JTextComponent
JTextComponent.AccessibleJTextComponent, JTextComponent.DropLocation, JTextComponent.KeyBinding
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
Fields inherited from class javax.swing.JTextField
notifyAction
Fields inherited from class javax.swing.text.JTextComponent
DEFAULT_KEYMAP, FOCUS_ACCELERATOR_KEY
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
ConstructorsConstructorDescriptionCreates a new search field with a default prompt.JXSearchField
(String prompt) Creates a new search field with the given prompt andJXSearchField.SearchMode.INSTANT
. -
Method Summary
Modifier and TypeMethodDescriptionprotected JButton
Creates and returns the cancel button.protected JButton
Creates and returns the find button.protected JButton
Creates and returns the popup button.void
customSetUIProperty
(String propertyName, Object value) Hack to enable the UI delegate to set default values depending on the current Look and Feel, without overriding custom values.void
customSetUIProperty
(String propertyName, Object value, boolean override) Hack to enable the UI delegate to set default values depending on the current Look and Feel, without overriding custom values.final ActionListener
Returns the cancel action, or an instance ofJXSearchField.ClearAction
, if none has been set.final JButton
Returns the cancel button.final ActionListener
Returns the action that is invoked when the enter key is pressed or the find button is clicked.final JButton
Returns the find button.Returns the find popup menu.int
Get the instant search delay in milliseconds.Returns theTimer
used to delay the firing of action events in instant search mode when the user enters text.Get the currentJXSearchField.LayoutStyle
.final JButton
Returns the popup button.Returns the key used to persist recent searches.Returns the currentJXSearchField.SearchMode
.boolean
hasFocus()
Returnstrue
if this search field is the focus owner or the find popup menu is visible.boolean
boolean
final boolean
boolean
boolean
boolean
Returnstrue
if the popup button should be visible and used for displaying the find popup menu.boolean
void
Overriden to prevent any delayedActionEvent
s from being sent after posting this action.final void
setCancelAction
(ActionListener cancelAction) Sets the action that is invoked, when the user presses the 'Esc' key or clicks the cancel button.void
setEditable
(boolean b) Updates the cancel, find and popup buttons enabled state in addition to setting the search fields editable state.void
setEnabled
(boolean enabled) Updates the cancel, find and popup buttons enabled state in addition to setting the search fields enabled state.final void
setFindAction
(ActionListener findAction) Sets the action that is invoked when the enter key is pressed or the find button is clicked.void
setFindPopupMenu
(JPopupMenu findPopupMenu) Sets the popup menu that will be displayed when the popup button is clicked.void
setInstantSearchDelay
(int instantSearchDelay) Set the instant search delay in milliseconds.void
setLayoutStyle
(JXSearchField.LayoutStyle layoutStyle) Set the currentJXSearchField.LayoutStyle
.void
Set the margin space around the search field's text.void
setPromptFontStyle
(Integer fontStyle) Hack to enable the UI delegate to set default values depending on the current Look and Feel, without overriding custom values.void
setRecentSearchesSaveKey
(String recentSearchesSaveKey) Installs and manages a recent searches popup menu as the find popup menu, ifrecentSearchesSaveKey
is not null.void
setSearchMode
(JXSearchField.SearchMode searchMode) Sets the current search mode.void
setUseNativeSearchFieldIfPossible
(boolean useNativeSearchFieldIfPossible) void
setUseSeperatePopupButton
(boolean useSeperatePopupButton) Set if the popup button should be used for displaying the find popup menu.protected void
Enables the cancel action if this search field is editable and enabled, otherwise it will be disabled.void
updateUI()
Overriden to also update the find popup menu if set.Methods inherited from class org.jdesktop.swingx.JXTextField
addBuddy, addGap, getBuddies, getFocusBehavior, getOuterMargin, getPrompt, getPromptBackground, getPromptFontStyle, getPromptForeground, removeAllBuddies, setFocusBehavior, setOuterMargin, setPrompt, setPromptBackround, setPromptForeground
Methods inherited from class javax.swing.JTextField
actionPropertyChanged, addActionListener, configurePropertiesFromAction, createActionPropertyChangeListener, createDefaultModel, fireActionPerformed, getAccessibleContext, getAction, getActionListeners, getActions, getColumns, getColumnWidth, getHorizontalAlignment, getHorizontalVisibility, getPreferredSize, getScrollOffset, getUIClassID, isValidateRoot, paramString, removeActionListener, scrollRectToVisible, setAction, setActionCommand, setColumns, setDocument, setFont, setHorizontalAlignment, setScrollOffset
Methods inherited from class javax.swing.text.JTextComponent
addCaretListener, addInputMethodListener, addKeymap, copy, cut, fireCaretUpdate, getCaret, getCaretColor, getCaretListeners, getCaretPosition, getDisabledTextColor, getDocument, getDragEnabled, getDropLocation, getDropMode, getFocusAccelerator, getHighlighter, getInputMethodRequests, getKeymap, getKeymap, getMargin, getNavigationFilter, getPreferredScrollableViewportSize, getPrintable, getScrollableBlockIncrement, getScrollableTracksViewportHeight, getScrollableTracksViewportWidth, getScrollableUnitIncrement, getSelectedText, getSelectedTextColor, getSelectionColor, getSelectionEnd, getSelectionStart, getText, getText, getToolTipText, getUI, isEditable, loadKeymap, modelToView, modelToView2D, moveCaretPosition, paste, print, print, print, processInputMethodEvent, read, removeCaretListener, removeKeymap, removeNotify, replaceSelection, restoreComposedText, saveComposedText, select, selectAll, setCaret, setCaretColor, setCaretPosition, setComponentOrientation, setDisabledTextColor, setDragEnabled, setDropMode, setFocusAccelerator, setHighlighter, setKeymap, setNavigationFilter, setSelectedTextColor, setSelectionColor, setSelectionEnd, setSelectionStart, setText, setUI, viewToModel, viewToModel2D, write
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, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setFocusTraversalKeys, 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, addImpl, 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, setLayout, transferFocusDownCycle, validate, validateTree
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, 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, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, 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, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
-
Constructor Details
-
JXSearchField
public JXSearchField()Creates a new search field with a default prompt. -
JXSearchField
Creates a new search field with the given prompt andJXSearchField.SearchMode.INSTANT
.- Parameters:
prompt
-
-
-
Method Details
-
getSearchMode
Returns the currentJXSearchField.SearchMode
.- Returns:
- the current
JXSearchField.SearchMode
.
-
isInstantSearchMode
public boolean isInstantSearchMode()- Returns:
true
if the currentJXSearchField.SearchMode
isJXSearchField.SearchMode.INSTANT
-
isRegularSearchMode
public boolean isRegularSearchMode()- Returns:
true
if the currentJXSearchField.SearchMode
isJXSearchField.SearchMode.REGULAR
-
setSearchMode
Sets the current search mode. SeeJXSearchField.SearchMode
for a description of the different search modes.- Parameters:
searchMode
-JXSearchField.SearchMode.INSTANT
orJXSearchField.SearchMode.REGULAR
-
getInstantSearchDelay
public int getInstantSearchDelay()Get the instant search delay in milliseconds. The default delay is 50 Milliseconds.- Returns:
- the instant search delay in milliseconds
- See Also:
-
setInstantSearchDelay
public void setInstantSearchDelay(int instantSearchDelay) Set the instant search delay in milliseconds. InJXSearchField.SearchMode.INSTANT
, when the user changes the text, an action event will be fired after the specified instant search delay. It is recommended to use a instant search delay to avoid the firing of unnecessary events. For example when the user replaces the whole text with a different text the search fields underlyingDocument
typically fires 2 document events. The first one, because the old text is removed and the second one because the new text is inserted. If the instant search delay is 0, this would result in 2 action events being fired. When a instant search delay is used, the first document event typically is ignored, because the second one is fired before the delay is over, which results in a correct behavior because only the last and only relevant event will be delivered.- Parameters:
instantSearchDelay
-
-
getLayoutStyle
Get the currentJXSearchField.LayoutStyle
.- Returns:
-
isVistaLayoutStyle
public boolean isVistaLayoutStyle()- Returns:
-
isMacLayoutStyle
public boolean isMacLayoutStyle()- Returns:
-
setLayoutStyle
Set the currentJXSearchField.LayoutStyle
. SeeJXSearchField.LayoutStyle
for a description of how this affects layout and behavior of the search field.- Parameters:
layoutStyle
-JXSearchField.LayoutStyle.MAC
orJXSearchField.LayoutStyle.VISTA
-
setMargin
Set the margin space around the search field's text.- Overrides:
setMargin
in classJTextComponent
- See Also:
-
getCancelAction
Returns the cancel action, or an instance ofJXSearchField.ClearAction
, if none has been set.- Returns:
- the cancel action
-
setCancelAction
Sets the action that is invoked, when the user presses the 'Esc' key or clicks the cancel button.- Parameters:
cancelAction
-
-
getCancelButton
Returns the cancel button. CallscreateCancelButton()
to create the cancel button and registers anActionListener
that delegates actions to theActionListener
returned bygetCancelAction()
, if needed.- Returns:
- the cancel button
-
createCancelButton
Creates and returns the cancel button. Override to use a custom cancel button.- Returns:
- the cancel button
- See Also:
-
getFindAction
Returns the action that is invoked when the enter key is pressed or the find button is clicked. If no action has been set, a new instance ofJXSearchField.FindAction
will be returned.- Returns:
- the find action
-
setFindAction
Sets the action that is invoked when the enter key is pressed or the find button is clicked. -
getFindButton
Returns the find button. CallscreateFindButton()
to create the find button and registers anActionListener
that delegates actions to theActionListener
returned bygetFindAction()
, if needed.- Returns:
- the find button
-
createFindButton
Creates and returns the find button. The buttons action is set to the action returned bygetSearchAction()
Override to use a custom find button.- Returns:
- the find button
- See Also:
-
getPopupButton
Returns the popup button. If a find popup menu is set, it will be displayed when this button is clicked. This button will only be visible, ifisUseSeperatePopupButton()
returnstrue
. Otherwise the popup menu will be displayed when the find button is clicked.- Returns:
- the popup button
-
createPopupButton
Creates and returns the popup button. Override to use a custom popup button.- Returns:
- the popup button
- See Also:
-
isUseSeperatePopupButton
public boolean isUseSeperatePopupButton()Returnstrue
if the popup button should be visible and used for displaying the find popup menu. Otherwise, the find popup menu will be displayed when the find button is clicked.- Returns:
true
if the popup button should be used
-
setUseSeperatePopupButton
public void setUseSeperatePopupButton(boolean useSeperatePopupButton) Set if the popup button should be used for displaying the find popup menu.- Parameters:
useSeperatePopupButton
-
-
isUseNativeSearchFieldIfPossible
public boolean isUseNativeSearchFieldIfPossible() -
setUseNativeSearchFieldIfPossible
public void setUseNativeSearchFieldIfPossible(boolean useNativeSearchFieldIfPossible) -
setEditable
public void setEditable(boolean b) Updates the cancel, find and popup buttons enabled state in addition to setting the search fields editable state.- Overrides:
setEditable
in classJTextComponent
- See Also:
-
setEnabled
public void setEnabled(boolean enabled) Updates the cancel, find and popup buttons enabled state in addition to setting the search fields enabled state.- Overrides:
setEnabled
in classJComponent
- See Also:
-
updateButtonState
protected void updateButtonState()Enables the cancel action if this search field is editable and enabled, otherwise it will be disabled. Enabled the search action and popup button if this search field is enabled, otherwise it will be disabled. -
setFindPopupMenu
Sets the popup menu that will be displayed when the popup button is clicked. If a find popup menu is set andisUseSeperatePopupButton()
returnsfalse
, the popup button will be displayed instead of the find button. Otherwise the popup button will be displayed in addition to the find button. The find popup menu is managed usingNativeSearchFieldSupport
to achieve compatibility with the native search field support provided by the Mac Look And Feel since Mac OS 10.5. If a recent searches save key has been set and therefore a recent searches popup menu is installed, this method does nothing. You must first remove the recent searches save key, by callingsetRecentSearchesSaveKey(String)
with anull
parameter.- Parameters:
findPopupMenu
- the popup menu, which will be displayed when the popup button is clicked- See Also:
-
getFindPopupMenu
Returns the find popup menu.- Returns:
- the find popup menu
- See Also:
-
isManagingRecentSearches
public final boolean isManagingRecentSearches()- Returns:
-
getRecentSearchesSaveKey
Returns the key used to persist recent searches.- Returns:
- See Also:
-
setRecentSearchesSaveKey
Installs and manages a recent searches popup menu as the find popup menu, ifrecentSearchesSaveKey
is not null. Otherwise, removes the popup menu and stops managing recent searches.- Parameters:
recentSearchesSaveKey
- this key is used to persist the recent searches.- See Also:
-
getRecentSearches
- Returns:
-
getInstantSearchTimer
Returns theTimer
used to delay the firing of action events in instant search mode when the user enters text. This timer callspostActionEvent()
.- Returns:
- the
Timer
used to delay the firing of action events
-
hasFocus
public boolean hasFocus()Returnstrue
if this search field is the focus owner or the find popup menu is visible. This is a hack to make the search field paint the focus indicator in Mac OS X Aqua when the find popup menu is visible. -
updateUI
public void updateUI()Overriden to also update the find popup menu if set.- Overrides:
updateUI
in classJTextComponent
-
setPromptFontStyle
Hack to enable the UI delegate to set default values depending on the current Look and Feel, without overriding custom values.- Overrides:
setPromptFontStyle
in classJXTextField
- See Also:
-
customSetUIProperty
Hack to enable the UI delegate to set default values depending on the current Look and Feel, without overriding custom values.- Parameters:
propertyName
- the name of the property to changevalue
- the new value of the property
-
customSetUIProperty
Hack to enable the UI delegate to set default values depending on the current Look and Feel, without overriding custom values.- Parameters:
propertyName
- the name of the property to changevalue
- the new value of the propertyoverride
- override custom values
-
postActionEvent
public void postActionEvent()Overriden to prevent any delayedActionEvent
s from being sent after posting this action. For example, if the currentJXSearchField.SearchMode
isJXSearchField.SearchMode.INSTANT
and the instant search delay is greater 0. The user enters some text and presses enter. This method will be invoked immediately because the users presses enter. However, this method would be invoked after the instant search delay, if we would not prevent it here.- Overrides:
postActionEvent
in classJTextField
-