Class PlasticComboBoxUI


  • public class PlasticComboBoxUI
    extends javax.swing.plaf.metal.MetalComboBoxUI
    The JGoodies Plastic Look and Feel implementation of ComboBoxUI. Has the same height as text fields - unless you change the renderer.

    Also, this class offers to use the combo's popup prototype display value to compute the popup menu width. This is an optional feature of the JGoodies Plastic L&fs implemented via a client property key.

    Version:
    $Revision: 1.19 $
    See Also:
    Options.COMBO_POPUP_PROTOTYPE_DISPLAY_VALUE_KEY
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      private class  PlasticComboBoxUI.PlasticComboBoxLayoutManager
      This layout manager handles the 'standard' layout of combo boxes.
      private static class  PlasticComboBoxUI.PlasticComboPopup
      Differs from the BasicComboPopup in that it uses the standard popmenu border and honors an optional popup prototype display value.
      private class  PlasticComboBoxUI.PlasticPropertyChangeListener
      Overriden to use PlasticComboBoxButton instead of a MetalComboBoxButton.
      private class  PlasticComboBoxUI.TableCellEditorPropertyChangeHandler
      Listens to changes in the table cell editor client property and updates the default editor - if any - to use the correct insets for this case.
      • Nested classes/interfaces inherited from class javax.swing.plaf.metal.MetalComboBoxUI

        javax.swing.plaf.metal.MetalComboBoxUI.MetalComboBoxLayoutManager, javax.swing.plaf.metal.MetalComboBoxUI.MetalComboPopup, javax.swing.plaf.metal.MetalComboBoxUI.MetalPropertyChangeListener
      • Nested classes/interfaces inherited from class javax.swing.plaf.basic.BasicComboBoxUI

        javax.swing.plaf.basic.BasicComboBoxUI.ComboBoxLayoutManager, javax.swing.plaf.basic.BasicComboBoxUI.FocusHandler, javax.swing.plaf.basic.BasicComboBoxUI.ItemHandler, javax.swing.plaf.basic.BasicComboBoxUI.KeyHandler, javax.swing.plaf.basic.BasicComboBoxUI.ListDataHandler, javax.swing.plaf.basic.BasicComboBoxUI.PropertyChangeHandler
    • Field Summary

      Fields 
      Modifier and Type Field Description
      (package private) static java.lang.String CELL_EDITOR_KEY  
      private static javax.swing.JTextField PHANTOM
      Used to determine the minimum height of a text field, which in turn is used to answer the combobox's minimum height.
      private static java.lang.Class phantomLafClass
      Different Plastic L&fs may need different phantom UIs.
      private java.beans.PropertyChangeListener propertyChangeListener  
      private boolean tableCellEditor  
      • Fields inherited from class javax.swing.plaf.basic.BasicComboBoxUI

        arrowButton, cachedMinimumSize, comboBox, currentValuePane, editor, focusListener, hasFocus, isMinimumSizeDirty, itemListener, keyListener, listBox, listDataListener, padding, popup, popupKeyListener, popupMouseListener, popupMouseMotionListener, squareButton
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected javax.swing.JButton createArrowButton()
      Creates and answers the arrow button that is to be used in the combo box.
      protected javax.swing.ComboBoxEditor createEditor()
      Creates the editor that is to be used in editable combo boxes.
      protected java.awt.LayoutManager createLayoutManager()
      Creates a layout manager for managing the components which make up the combo box.
      protected javax.swing.plaf.basic.ComboPopup createPopup()  
      java.beans.PropertyChangeListener createPropertyChangeListener()  
      protected javax.swing.ListCellRenderer createRenderer()
      Creates the default renderer that will be used in a non-editiable combo box.
      static javax.swing.plaf.ComponentUI createUI​(javax.swing.JComponent b)  
      private static void ensurePhantomHasPlasticUI()
      Ensures that the phantom text field has a Plastic text field UI.
      (package private) static int getEditableButtonWidth()
      Computes and returns the width of the arrow button in editable state.
      java.awt.Dimension getMinimumSize​(javax.swing.JComponent c)
      The minumum size is the size of the display area plus insets plus the button.
      java.awt.Dimension getPreferredSize​(javax.swing.JComponent c)
      Delegates to #getMinimumSize(Component).
      protected void installListeners()  
      void installUI​(javax.swing.JComponent c)  
      private boolean isTableCellEditor()
      Checks and answers if this UI's combo has a client property that indicates that the combo is used as a table cell editor.
      protected boolean isToolBarComboBox​(javax.swing.JComponent c)
      Checks and answers if this combo is in a tool bar.
      protected java.awt.Rectangle rectangleForCurrentValue()
      Returns the area that is reserved for drawing the currently selected item.
      protected void uninstallListeners()  
      void update​(java.awt.Graphics g, javax.swing.JComponent c)  
      • Methods inherited from class javax.swing.plaf.metal.MetalComboBoxUI

        configureEditor, editablePropertyChanged, getBaseline, layoutComboBox, paint, paintCurrentValue, paintCurrentValueBackground, removeListeners, unconfigureEditor
      • Methods inherited from class javax.swing.plaf.basic.BasicComboBoxUI

        addEditor, configureArrowButton, createFocusListener, createItemListener, createKeyListener, createListDataListener, getAccessibleChild, getAccessibleChildrenCount, getBaselineResizeBehavior, getDefaultSize, getDisplaySize, getInsets, getMaximumSize, getSizeForComponent, installComponents, installDefaults, installKeyboardActions, isFocusTraversable, isNavigationKey, isPopupVisible, removeEditor, selectNextPossibleValue, selectPreviousPossibleValue, setPopupVisible, toggleOpenClose, unconfigureArrowButton, uninstallComponents, uninstallDefaults, uninstallKeyboardActions, uninstallUI
      • Methods inherited from class javax.swing.plaf.ComponentUI

        contains
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • PHANTOM

        private static final javax.swing.JTextField PHANTOM
        Used to determine the minimum height of a text field, which in turn is used to answer the combobox's minimum height.
      • phantomLafClass

        private static java.lang.Class phantomLafClass
        Different Plastic L&fs may need different phantom UIs. Therefore we store the LookAndFeel class and update the phantom UI whenever the Look&Feel changes.
      • tableCellEditor

        private boolean tableCellEditor
      • propertyChangeListener

        private java.beans.PropertyChangeListener propertyChangeListener
    • Constructor Detail

      • PlasticComboBoxUI

        public PlasticComboBoxUI()
    • Method Detail

      • createUI

        public static javax.swing.plaf.ComponentUI createUI​(javax.swing.JComponent b)
      • ensurePhantomHasPlasticUI

        private static void ensurePhantomHasPlasticUI()
        Ensures that the phantom text field has a Plastic text field UI.
      • installUI

        public void installUI​(javax.swing.JComponent c)
        Overrides:
        installUI in class javax.swing.plaf.basic.BasicComboBoxUI
      • installListeners

        protected void installListeners()
        Overrides:
        installListeners in class javax.swing.plaf.basic.BasicComboBoxUI
      • uninstallListeners

        protected void uninstallListeners()
        Overrides:
        uninstallListeners in class javax.swing.plaf.basic.BasicComboBoxUI
      • createArrowButton

        protected javax.swing.JButton createArrowButton()
        Creates and answers the arrow button that is to be used in the combo box.

        Overridden to use a button that can have a pseudo 3D effect.

        Overrides:
        createArrowButton in class javax.swing.plaf.metal.MetalComboBoxUI
      • createEditor

        protected javax.swing.ComboBoxEditor createEditor()
        Creates the editor that is to be used in editable combo boxes. This method only gets called if a custom editor has not already been installed in the JComboBox.
        Overrides:
        createEditor in class javax.swing.plaf.metal.MetalComboBoxUI
      • createLayoutManager

        protected java.awt.LayoutManager createLayoutManager()
        Creates a layout manager for managing the components which make up the combo box.

        Overriden to use a layout that has a fixed width arrow button.

        Overrides:
        createLayoutManager in class javax.swing.plaf.metal.MetalComboBoxUI
        Returns:
        an instance of a layout manager
      • createPopup

        protected javax.swing.plaf.basic.ComboPopup createPopup()
        Overrides:
        createPopup in class javax.swing.plaf.metal.MetalComboBoxUI
      • createRenderer

        protected javax.swing.ListCellRenderer createRenderer()
        Creates the default renderer that will be used in a non-editiable combo box. A default renderer will used only if a renderer has not been explicitly set with setRenderer.

        This method differs from the superclass implementation in that it uses an empty border with wider left and right margins of 2 pixels instead of 1.

        Overrides:
        createRenderer in class javax.swing.plaf.basic.BasicComboBoxUI
        Returns:
        a ListCellRender used for the combo box
        See Also:
        JComboBox.setRenderer(javax.swing.ListCellRenderer<? super E>)
      • getMinimumSize

        public java.awt.Dimension getMinimumSize​(javax.swing.JComponent c)
        The minumum size is the size of the display area plus insets plus the button.
        Overrides:
        getMinimumSize in class javax.swing.plaf.metal.MetalComboBoxUI
      • getPreferredSize

        public java.awt.Dimension getPreferredSize​(javax.swing.JComponent c)
        Delegates to #getMinimumSize(Component). Overridden to return the same result in JDK 1.5 as in JDK 1.4.
        Overrides:
        getPreferredSize in class javax.swing.plaf.basic.BasicComboBoxUI
      • rectangleForCurrentValue

        protected java.awt.Rectangle rectangleForCurrentValue()
        Returns the area that is reserved for drawing the currently selected item.
        Overrides:
        rectangleForCurrentValue in class javax.swing.plaf.basic.BasicComboBoxUI
      • update

        public void update​(java.awt.Graphics g,
                           javax.swing.JComponent c)
        Overrides:
        update in class javax.swing.plaf.ComponentUI
      • isToolBarComboBox

        protected boolean isToolBarComboBox​(javax.swing.JComponent c)
        Checks and answers if this combo is in a tool bar.
        Parameters:
        c - the component to check
        Returns:
        true if in tool bar, false otherwise
      • getEditableButtonWidth

        static int getEditableButtonWidth()
        Computes and returns the width of the arrow button in editable state. The perceived width shall be equal to the width of a scroll bar. Therefore we subtract a pixel that is perceived as part of the arrow button but that is painted by the editor's border.
        Returns:
        the width of the arrow button in editable state
      • isTableCellEditor

        private boolean isTableCellEditor()
        Checks and answers if this UI's combo has a client property that indicates that the combo is used as a table cell editor.
        Returns:
        true if the table cell editor client property is set to Boolean.TRUE, false otherwise
      • createPropertyChangeListener

        public java.beans.PropertyChangeListener createPropertyChangeListener()
        Overrides:
        createPropertyChangeListener in class javax.swing.plaf.metal.MetalComboBoxUI