- All Implemented Interfaces:
ImageObserver,MenuContainer,Serializable,Accessible,MenuElement,ComboPopup
- Direct Known Subclasses:
MetalComboBoxUI.MetalComboPopup
public class BasicComboPopup extends JPopupMenu implements ComboPopup
ComboPopup interface.
This class represents the ui for the popup portion of the combo box.
All event handling is handled by listener classes created with the
createxxxListener() methods and internal classes.
You can change the behavior of this class by overriding the
createxxxListener() methods and supplying your own
event listeners or subclassing from the ones supplied in this class.
Warning:
Serialized objects of this class will not be compatible with
future Swing releases. The current serialization support is
appropriate for short term storage or RMI between applications running
the same version of Swing. As of 1.4, support for long term storage
of all JavaBeans™
has been added to the java.beans package.
Please see XMLEncoder.
-
Nested Class Summary
Nested Classes Modifier and Type Class Description classBasicComboPopup.InvocationKeyHandlerAs of Java 2 platform v 1.4, this class is now obsolete and is only included for backwards API compatibility.protected classBasicComboPopup.InvocationMouseHandlerA listener to be registered upon the combo box (not its popup menu) to handle mouse events that affect the state of the popup menu.protected classBasicComboPopup.InvocationMouseMotionHandlerThis listener watches for dragging and updates the current selection in the list if it is dragging over the list.protected classBasicComboPopup.ItemHandlerThis listener watches for changes to the selection in the combo box.classBasicComboPopup.ListDataHandlerAs of 1.4, this class is now obsolete, doesn't do anything, and is only included for backwards API compatibility.protected classBasicComboPopup.ListMouseHandlerThis listener hides the popup when the mouse is released in the list.protected classBasicComboPopup.ListMouseMotionHandlerThis listener changes the selected item as you move the mouse over the list.protected classBasicComboPopup.ListSelectionHandlerAs of Java 2 platform v 1.4, this class is now obsolete, doesn't do anything, and is only included for backwards API compatibility.protected classBasicComboPopup.PropertyChangeHandlerThis listener watches for bound properties that have changed in the combo box.Nested classes/interfaces declared in class javax.swing.JPopupMenu
JPopupMenu.AccessibleJPopupMenu, JPopupMenu.SeparatorNested classes/interfaces declared in class java.awt.Component
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy -
Field Summary
Fields Modifier and Type Field Description protected TimerautoscrollTimerThis protected field is implementation specific.protected JComboBox<Object>comboBoxThe instance ofJComboBox.protected booleanhasEnteredtrueif the mouse cursor is in the popup.protected booleanisAutoScrollingIftruethe auto-scrolling is enabled.protected ItemListeneritemListenerThis protected field is implementation specific.protected KeyListenerkeyListenerThis protected field is implementation specific.protected JList<Object>listThis protected field is implementation specific.protected ListDataListenerlistDataListenerThis protected field is implementation specific.protected MouseListenerlistMouseListenerThis protected field is implementation specific.protected MouseMotionListenerlistMouseMotionListenerThis protected field is implementation specific.protected ListSelectionListenerlistSelectionListenerThis protected field is implementation specific.protected MouseListenermouseListenerThis protected field is implementation specific.protected MouseMotionListenermouseMotionListenerThis protected field is implementation specific.protected PropertyChangeListenerpropertyChangeListenerThis protected field is implementation specific.protected static intSCROLL_DOWNThe direction of scrolling down.protected static intSCROLL_UPThe direction of scrolling up.protected intscrollDirectionThe direction of scrolling.protected JScrollPanescrollerThis protected field is implementation specific.protected booleanvalueIsAdjustingAs of Java 2 platform v1.4 this previously undocumented field is no longer used.Fields declared in class javax.swing.JComponent
listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOWFields declared in class java.awt.Component
accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENTFields declared in interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH -
Constructor Summary
Constructors Constructor Description BasicComboPopup(JComboBox<Object> combo)Constructs a new instance ofBasicComboPopup. -
Method Summary
Modifier and Type Method Description protected voidautoScrollDown()This protected method is implementation specific and should be private.protected voidautoScrollUp()This protected method is implementation specific and should be private.protected RectanglecomputePopupBounds(int px, int py, int pw, int ph)Calculate the placement and size of the popup portion of the combo box based on the combo box location and the enclosing screen bounds.protected voidconfigureList()Configures the list which is used to hold the combo box items in the popup.protected voidconfigurePopup()Configures the popup portion of the combo box.protected voidconfigureScroller()Configures the scrollable portion which holds the list within the combo box popup.protected MouseEventconvertMouseEvent(MouseEvent e)Converts mouse event.protected ItemListenercreateItemListener()Creates anItemListenerwhich will be added to the combo box.protected KeyListenercreateKeyListener()Creates the key listener that will be added to the combo box.protected JList<Object>createList()Creates the JList used in the popup to display the items in the combo box model.protected ListDataListenercreateListDataListener()Creates a list data listener which will be added to theComboBoxModel.protected MouseListenercreateListMouseListener()Creates a mouse listener that watches for mouse events in the popup's list.protected MouseMotionListenercreateListMouseMotionListener()Creates a mouse motion listener that watches for mouse motion events in the popup's list.protected ListSelectionListenercreateListSelectionListener()Creates a list selection listener that watches for selection changes in the popup's list.protected MouseListenercreateMouseListener()Creates a listener that will watch for mouse-press and release events on the combo box.protected MouseMotionListenercreateMouseMotionListener()Creates the mouse motion listener which will be added to the combo box.protected PropertyChangeListenercreatePropertyChangeListener()Creates aPropertyChangeListenerwhich will be added to the combo box.protected JScrollPanecreateScroller()Creates the scroll pane which houses the scrollable list.protected voiddelegateFocus(MouseEvent e)This is a utility method that helps event handlers figure out where to send the focus when the popup is brought up.AccessibleContextgetAccessibleContext()Gets the AccessibleContext associated with this BasicComboPopup.KeyListenergetKeyListener()Implementation of ComboPopup.getKeyListener().JList<Object>getList()Implementation of ComboPopup.getList().MouseListenergetMouseListener()Implementation of ComboPopup.getMouseListener().MouseMotionListenergetMouseMotionListener()Implementation of ComboPopup.getMouseMotionListener().protected intgetPopupHeightForRowCount(int maxRowCount)Retrieves the height of the popup based on the current ListCellRenderer and the maximum row count.voidhide()Implementation of ComboPopup.hide().protected voidinstallComboBoxListeners()This method adds the necessary listeners to the JComboBox.protected voidinstallComboBoxModelListeners(ComboBoxModel<?> model)Installs the listeners on the combo box model.protected voidinstallKeyboardActions()Registers keyboard actions.protected voidinstallListListeners()Adds the listeners to the list control.booleanisFocusTraversable()Overridden to unconditionally return false.voidshow()Implementation of ComboPopup.show().protected voidstartAutoScrolling(int direction)This protected method is implementation specific and should be private.protected voidstopAutoScrolling()This protected method is implementation specific and should be private.protected voidtogglePopup()Makes the popup visible if it is hidden and makes it hidden if it is visible.protected voiduninstallComboBoxModelListeners(ComboBoxModel<?> model)Removes the listeners from the combo box modelvoiduninstallingUI()Called when the UI is uninstalling.protected voiduninstallKeyboardActions()Unregisters keyboard actions.protected voidupdateListBoxSelectionForEvent(MouseEvent anEvent, boolean shouldScroll)A utility method used by the event listeners.Methods declared in class javax.swing.JPopupMenu
add, add, add, addMenuKeyListener, addPopupMenuListener, addSeparator, createActionChangeListener, createActionComponent, firePopupMenuCanceled, firePopupMenuWillBecomeInvisible, firePopupMenuWillBecomeVisible, getComponent, getComponentAtIndex, getComponentIndex, getDefaultLightWeightPopupEnabled, getInvoker, getLabel, getMargin, getMenuKeyListeners, getPopupMenuListeners, getSelectionModel, getSubElements, getUI, getUIClassID, insert, insert, isBorderPainted, isLightWeightPopupEnabled, isPopupTrigger, isVisible, menuSelectionChanged, pack, paintBorder, paramString, processKeyEvent, processKeyEvent, processMouseEvent, remove, removeMenuKeyListener, removePopupMenuListener, setBorderPainted, setDefaultLightWeightPopupEnabled, setInvoker, setLabel, setLightWeightPopupEnabled, setLocation, setPopupSize, setPopupSize, setSelected, setSelectionModel, setUI, setVisible, show, updateUIMethods declared in class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, 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, 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, unregisterKeyboardAction, updateMethods declared in 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, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTreeMethods declared in 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, 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, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, 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, setMixingCutoutShape, setName, setSize, setSize, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
-
Field Details
-
comboBox
The instance ofJComboBox. -
list
This protected field is implementation specific. Do not access directly or override. Use the accessor methods instead.- See Also:
getList(),createList()
-
scroller
This protected field is implementation specific. Do not access directly or override. Use the create method instead- See Also:
createScroller()
-
valueIsAdjusting
protected boolean valueIsAdjustingAs of Java 2 platform v1.4 this previously undocumented field is no longer used. -
mouseMotionListener
This protected field is implementation specific. Do not access directly or override. Use the accessor or create methods instead. -
mouseListener
This protected field is implementation specific. Do not access directly or override. Use the accessor or create methods instead.- See Also:
getMouseListener(),createMouseListener()
-
keyListener
This protected field is implementation specific. Do not access directly or override. Use the accessor or create methods instead.- See Also:
getKeyListener(),createKeyListener()
-
listSelectionListener
This protected field is implementation specific. Do not access directly or override. Use the create method instead.- See Also:
createListSelectionListener()
-
listMouseListener
This protected field is implementation specific. Do not access directly or override. Use the create method instead.- See Also:
createListMouseListener()
-
listMouseMotionListener
This protected field is implementation specific. Do not access directly or override. Use the create method instead- See Also:
createListMouseMotionListener()
-
propertyChangeListener
This protected field is implementation specific. Do not access directly or override. Use the create method instead- See Also:
createPropertyChangeListener()
-
listDataListener
This protected field is implementation specific. Do not access directly or override. Use the create method instead- See Also:
createListDataListener()
-
itemListener
This protected field is implementation specific. Do not access directly or override. Use the create method instead- See Also:
createItemListener()
-
autoscrollTimer
This protected field is implementation specific. Do not access directly or override. -
hasEntered
protected boolean hasEnteredtrueif the mouse cursor is in the popup. -
isAutoScrolling
protected boolean isAutoScrollingIftruethe auto-scrolling is enabled. -
scrollDirection
protected int scrollDirectionThe direction of scrolling. -
SCROLL_UP
protected static final int SCROLL_UPThe direction of scrolling up.- See Also:
- Constant Field Values
-
SCROLL_DOWN
protected static final int SCROLL_DOWNThe direction of scrolling down.- See Also:
- Constant Field Values
-
-
Constructor Details
-
BasicComboPopup
Constructs a new instance ofBasicComboPopup.- Parameters:
combo- an instance ofJComboBox
-
-
Method Details
-
show
public void show()Implementation of ComboPopup.show().- Specified by:
showin interfaceComboPopup- Overrides:
showin classComponent
-
hide
public void hide()Implementation of ComboPopup.hide().- Specified by:
hidein interfaceComboPopup- Overrides:
hidein classJComponent
-
getList
Implementation of ComboPopup.getList().- Specified by:
getListin interfaceComboPopup- Returns:
- the list that is being used to draw the items in the combo box
-
getMouseListener
Implementation of ComboPopup.getMouseListener().- Specified by:
getMouseListenerin interfaceComboPopup- Returns:
- a
MouseListeneror null - See Also:
ComboPopup.getMouseListener()
-
getMouseMotionListener
Implementation of ComboPopup.getMouseMotionListener().- Specified by:
getMouseMotionListenerin interfaceComboPopup- Returns:
- a
MouseMotionListeneror null - See Also:
ComboPopup.getMouseMotionListener()
-
getKeyListener
Implementation of ComboPopup.getKeyListener().- Specified by:
getKeyListenerin interfaceComboPopup- Returns:
- a
KeyListeneror null - See Also:
ComboPopup.getKeyListener()
-
uninstallingUI
public void uninstallingUI()Called when the UI is uninstalling. Since this popup isn't in the component tree, it won't get it's uninstallUI() called. It removes the listeners that were added in addComboBoxListeners().- Specified by:
uninstallingUIin interfaceComboPopup
-
uninstallComboBoxModelListeners
Removes the listeners from the combo box model- Parameters:
model- The combo box model to install listeners- See Also:
installComboBoxModelListeners(javax.swing.ComboBoxModel<?>)
-
uninstallKeyboardActions
protected void uninstallKeyboardActions()Unregisters keyboard actions. -
createMouseListener
Creates a listener that will watch for mouse-press and release events on the combo box. Warning: When overriding this method, make sure to maintain the existing behavior.- Returns:
- a
MouseListenerwhich will be added to the combo box or null
-
createMouseMotionListener
Creates the mouse motion listener which will be added to the combo box. Warning: When overriding this method, make sure to maintain the existing behavior.- Returns:
- a
MouseMotionListenerwhich will be added to the combo box or null
-
createKeyListener
Creates the key listener that will be added to the combo box. If this method returns null then it will not be added to the combo box.- Returns:
- a
KeyListeneror null
-
createListSelectionListener
Creates a list selection listener that watches for selection changes in the popup's list. If this method returns null then it will not be added to the popup list.- Returns:
- an instance of a
ListSelectionListeneror null
-
createListDataListener
Creates a list data listener which will be added to theComboBoxModel. If this method returns null then it will not be added to the combo box model.- Returns:
- an instance of a
ListDataListeneror null
-
createListMouseListener
Creates a mouse listener that watches for mouse events in the popup's list. If this method returns null then it will not be added to the combo box.- Returns:
- an instance of a
MouseListeneror null
-
createListMouseMotionListener
Creates a mouse motion listener that watches for mouse motion events in the popup's list. If this method returns null then it will not be added to the combo box.- Returns:
- an instance of a
MouseMotionListeneror null
-
createPropertyChangeListener
Creates aPropertyChangeListenerwhich will be added to the combo box. If this method returns null then it will not be added to the combo box.- Returns:
- an instance of a
PropertyChangeListeneror null
-
createItemListener
Creates anItemListenerwhich will be added to the combo box. If this method returns null then it will not be added to the combo box.Subclasses may override this method to return instances of their own ItemEvent handlers.
- Returns:
- an instance of an
ItemListeneror null
-
createList
Creates the JList used in the popup to display the items in the combo box model. This method is called when the UI class is created.- Returns:
- a
JListused to display the combo box items
-
configureList
protected void configureList()Configures the list which is used to hold the combo box items in the popup. This method is called when the UI class is created.- See Also:
createList()
-
installListListeners
protected void installListListeners()Adds the listeners to the list control. -
createScroller
Creates the scroll pane which houses the scrollable list.- Returns:
- the scroll pane which houses the scrollable list
-
configureScroller
protected void configureScroller()Configures the scrollable portion which holds the list within the combo box popup. This method is called when the UI class is created. -
configurePopup
protected void configurePopup()Configures the popup portion of the combo box. This method is called when the UI class is created. -
installComboBoxListeners
protected void installComboBoxListeners()This method adds the necessary listeners to the JComboBox. -
installComboBoxModelListeners
Installs the listeners on the combo box model. Any listeners installed on the combo box model should be removed inuninstallComboBoxModelListeners.- Parameters:
model- The combo box model to install listeners- See Also:
uninstallComboBoxModelListeners(javax.swing.ComboBoxModel<?>)
-
installKeyboardActions
protected void installKeyboardActions()Registers keyboard actions. -
isFocusTraversable
public boolean isFocusTraversable()Overridden to unconditionally return false.- Overrides:
isFocusTraversablein classComponent- Returns:
trueif thisComponentis focusable;falseotherwise- See Also:
Component.setFocusable(boolean)
-
startAutoScrolling
protected void startAutoScrolling(int direction)This protected method is implementation specific and should be private. do not call or override.- Parameters:
direction- the direction of scrolling
-
stopAutoScrolling
protected void stopAutoScrolling()This protected method is implementation specific and should be private. do not call or override. -
autoScrollUp
protected void autoScrollUp()This protected method is implementation specific and should be private. do not call or override. -
autoScrollDown
protected void autoScrollDown()This protected method is implementation specific and should be private. do not call or override. -
getAccessibleContext
Gets the AccessibleContext associated with this BasicComboPopup. The AccessibleContext will have its parent set to the ComboBox.- Specified by:
getAccessibleContextin interfaceAccessible- Overrides:
getAccessibleContextin classJPopupMenu- Returns:
- an AccessibleContext for the BasicComboPopup
- Since:
- 1.5
-
delegateFocus
This is a utility method that helps event handlers figure out where to send the focus when the popup is brought up. The standard implementation delegates the focus to the editor (if the combo box is editable) or to the JComboBox if it is not editable.- Parameters:
e- a mouse event
-
togglePopup
protected void togglePopup()Makes the popup visible if it is hidden and makes it hidden if it is visible. -
convertMouseEvent
Converts mouse event.- Parameters:
e- a mouse event- Returns:
- converted mouse event
-
getPopupHeightForRowCount
protected int getPopupHeightForRowCount(int maxRowCount)Retrieves the height of the popup based on the current ListCellRenderer and the maximum row count.- Parameters:
maxRowCount- the row count- Returns:
- the height of the popup
-
computePopupBounds
Calculate the placement and size of the popup portion of the combo box based on the combo box location and the enclosing screen bounds. If no transformations are required, then the returned rectangle will have the same values as the parameters.- Parameters:
px- starting x locationpy- starting y locationpw- starting widthph- starting height- Returns:
- a rectangle which represents the placement and size of the popup
-
updateListBoxSelectionForEvent
A utility method used by the event listeners. Given a mouse event, it changes the list selection to the list item below the mouse.- Parameters:
anEvent- a mouse eventshouldScroll- iftruelist should be scrolled.
-