Class JideSplitButton

  • All Implemented Interfaces:
    Alignable, ButtonStyle, ComponentStateSupport, java.awt.image.ImageObserver, java.awt.ItemSelectable, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible, javax.swing.MenuElement, javax.swing.SwingConstants
    Direct Known Subclasses:
    JideToggleSplitButton

    public class JideSplitButton
    extends JideMenu
    implements ButtonStyle, ComponentStateSupport
    JideSplitButton is a combination of button and menu. There is a line in the middle of the button that splits the button into two portions. The portion before the line is a button. User can click on it and trigger an action. The portion after the line is a menu. User can click on it to show a normal menu.

    Please be noted that, when you try to use JideSplitButton as a menu item, please make sure that you will re-configure its font with the following code. Otherwise, it may look different with the other JMenuItems.

             splitButton.setFont((Font) JideSwingUtilities.getMenuFont(Toolkit.getDefaultToolkit(), UIManager.getDefaults()));
     
    See Also:
    Serialized Form
    • Nested Class Summary

      • Nested classes/interfaces inherited from class javax.swing.JMenu

        javax.swing.JMenu.AccessibleJMenu, javax.swing.JMenu.WinListener
      • Nested classes/interfaces inherited from class javax.swing.JMenuItem

        javax.swing.JMenuItem.AccessibleJMenuItem
      • Nested classes/interfaces inherited from class javax.swing.AbstractButton

        javax.swing.AbstractButton.AccessibleAbstractButton, javax.swing.AbstractButton.ButtonChangeListener
      • Nested classes/interfaces inherited from class javax.swing.JComponent

        javax.swing.JComponent.AccessibleJComponent
      • Nested classes/interfaces inherited from class java.awt.Container

        java.awt.Container.AccessibleAWTContainer
      • Nested classes/interfaces inherited from class java.awt.Component

        java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static java.lang.String ACTION_PROPERTY_SPLIT_BUTTON_ENABLED  
      static java.lang.String PROPERTY_ALWAYS_DROPDOWN  
      • Fields inherited from class javax.swing.JMenu

        popupListener
      • Fields inherited from class javax.swing.AbstractButton

        actionListener, BORDER_PAINTED_CHANGED_PROPERTY, changeEvent, changeListener, CONTENT_AREA_FILLED_CHANGED_PROPERTY, DISABLED_ICON_CHANGED_PROPERTY, DISABLED_SELECTED_ICON_CHANGED_PROPERTY, FOCUS_PAINTED_CHANGED_PROPERTY, HORIZONTAL_ALIGNMENT_CHANGED_PROPERTY, HORIZONTAL_TEXT_POSITION_CHANGED_PROPERTY, ICON_CHANGED_PROPERTY, itemListener, MARGIN_CHANGED_PROPERTY, MNEMONIC_CHANGED_PROPERTY, model, MODEL_CHANGED_PROPERTY, PRESSED_ICON_CHANGED_PROPERTY, ROLLOVER_ENABLED_CHANGED_PROPERTY, ROLLOVER_ICON_CHANGED_PROPERTY, ROLLOVER_SELECTED_ICON_CHANGED_PROPERTY, SELECTED_ICON_CHANGED_PROPERTY, TEXT_CHANGED_PROPERTY, VERTICAL_ALIGNMENT_CHANGED_PROPERTY, VERTICAL_TEXT_POSITION_CHANGED_PROPERTY
      • 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
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected void actionPropertyChanged​(javax.swing.Action action, java.lang.String propertyName)  
      protected void configurePropertiesFromAction​(javax.swing.Action action)  
      void doClick()
      Clicks on the button part of the JideSplitButton.
      void doClickOnMenu()
      Clicks on the drop down menu part of the JideSplitButton.
      java.awt.Color getBackgroundOfState​(int state)
      Gets the background for different states.
      int getButtonStyle()
      Gets the button style.
      java.awt.Color getDefaultForeground()  
      java.awt.Color getForegroundOfState​(int state)
      Gets the foreground for different states.
      javax.swing.plaf.ButtonUI getUI()
      Returns the split button 's current UI.
      java.lang.String getUIClassID()
      Returns the name of the L&F class that renders this component.
      protected void initComponent()  
      boolean isAlwaysDropdown()
      Checks the alwaysDropdown property value.
      boolean isButtonEnabled()
      Returns the state of the button part of the JideSplitButton.
      boolean isButtonSelected()
      Returns the state of the button part of the JideSplitButton.
      static boolean isSplitButtonEnabled​(javax.swing.Action action)
      Get if the split button is enable from the property stored inside the action.
      void setAlwaysDropdown​(boolean alwaysDropdown)
      If the property is true, the split button doesn't have default action.
      void setBackgroundOfState​(int state, java.awt.Color color)
      Sets the background for different states.
      void setButtonEnabled​(boolean b)
      Sets the state of the button part of the JideSplitButton.
      void setButtonSelected​(boolean b)
      Sets the state of the button part of the JideSplitButton.
      void setButtonStyle​(int buttonStyle)
      Sets the button style.
      void setDefaultForeground​(java.awt.Color defaultForeground)  
      void setForegroundOfState​(int state, java.awt.Color color)
      Sets the foreground for different states.
      protected void setIconFromAction​(javax.swing.Action action)
      By default, we will use large icon instead of small icon in the JMenuItem.
      void setText​(java.lang.String text)  
      void setUI​(javax.swing.plaf.ButtonUI ui)
      Sets the L&F object that renders this component.
      void updateUI()
      Notification from the UIFactory that the L&F has changed.
      • Methods inherited from class javax.swing.JMenu

        add, add, add, add, add, addMenuListener, addSeparator, applyComponentOrientation, createActionChangeListener, createActionComponent, createWinListener, doClick, fireMenuCanceled, fireMenuDeselected, fireMenuSelected, getAccessibleContext, getComponent, getDelay, getItem, getItemCount, getMenuComponent, getMenuComponentCount, getMenuComponents, getMenuListeners, getPopupMenu, getSubElements, insert, insert, insert, insertSeparator, isMenuComponent, isPopupMenuVisible, isSelected, isTearOff, menuSelectionChanged, paramString, processKeyEvent, remove, remove, remove, removeAll, removeMenuListener, setAccelerator, setComponentOrientation, setDelay, setMenuLocation, setModel, setSelected
      • Methods inherited from class javax.swing.JMenuItem

        addMenuDragMouseListener, addMenuKeyListener, fireMenuDragMouseDragged, fireMenuDragMouseEntered, fireMenuDragMouseExited, fireMenuDragMouseReleased, fireMenuKeyPressed, fireMenuKeyReleased, fireMenuKeyTyped, getAccelerator, getMenuDragMouseListeners, getMenuKeyListeners, init, isArmed, processKeyEvent, processMenuDragMouseEvent, processMenuKeyEvent, processMouseEvent, removeMenuDragMouseListener, removeMenuKeyListener, setArmed, setEnabled, setUI
      • Methods inherited from class javax.swing.AbstractButton

        addActionListener, addChangeListener, addImpl, addItemListener, checkHorizontalKey, checkVerticalKey, createActionListener, createActionPropertyChangeListener, createChangeListener, createItemListener, fireActionPerformed, fireItemStateChanged, fireStateChanged, getAction, getActionCommand, getActionListeners, getChangeListeners, getDisabledIcon, getDisabledSelectedIcon, getDisplayedMnemonicIndex, getHideActionText, getHorizontalAlignment, getHorizontalTextPosition, getIcon, getIconTextGap, getItemListeners, getLabel, getMargin, getMnemonic, getModel, getMultiClickThreshhold, getPressedIcon, getRolloverIcon, getRolloverSelectedIcon, getSelectedIcon, getSelectedObjects, getText, getVerticalAlignment, getVerticalTextPosition, imageUpdate, isBorderPainted, isContentAreaFilled, isFocusPainted, isRolloverEnabled, paintBorder, removeActionListener, removeChangeListener, removeItemListener, removeNotify, setAction, setActionCommand, setBorderPainted, setContentAreaFilled, setDisabledIcon, setDisabledSelectedIcon, setDisplayedMnemonicIndex, setFocusPainted, setHideActionText, setHorizontalAlignment, setHorizontalTextPosition, setIcon, setIconTextGap, setLabel, setLayout, setMargin, setMnemonic, setMnemonic, setMultiClickThreshhold, setPressedIcon, setRolloverEnabled, setRolloverIcon, setRolloverSelectedIcon, setSelectedIcon, setVerticalAlignment, setVerticalTextPosition
      • 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, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, 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, addContainerListener, addPropertyChangeListener, addPropertyChangeListener, 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, 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, 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, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • Methods inherited from interface javax.swing.MenuElement

        processKeyEvent, processMouseEvent
    • Field Detail

      • PROPERTY_ALWAYS_DROPDOWN

        public static final java.lang.String PROPERTY_ALWAYS_DROPDOWN
        See Also:
        Constant Field Values
      • ACTION_PROPERTY_SPLIT_BUTTON_ENABLED

        public static final java.lang.String ACTION_PROPERTY_SPLIT_BUTTON_ENABLED
        See Also:
        Constant Field Values
    • Constructor Detail

      • JideSplitButton

        public JideSplitButton()
      • JideSplitButton

        public JideSplitButton​(java.lang.String s)
      • JideSplitButton

        public JideSplitButton​(java.lang.String s,
                               javax.swing.Icon icon)
      • JideSplitButton

        public JideSplitButton​(javax.swing.Icon icon)
      • JideSplitButton

        public JideSplitButton​(javax.swing.Action a)
    • Method Detail

      • initComponent

        protected void initComponent()
      • getUI

        public javax.swing.plaf.ButtonUI getUI()
        Returns the split button 's current UI.
        Overrides:
        getUI in class javax.swing.AbstractButton
        See Also:
        setUI(javax.swing.plaf.ButtonUI)
      • setUI

        public void setUI​(javax.swing.plaf.ButtonUI ui)
        Sets the L&F object that renders this component.
        Overrides:
        setUI in class javax.swing.AbstractButton
        Parameters:
        ui - the JideSplitButtonUI L&F object
        See Also:
        UIDefaults.getUI(javax.swing.JComponent)
      • updateUI

        public void updateUI()
        Notification from the UIFactory that the L&F has changed. Called to replace the UI with the latest version from the UIFactory.
        Overrides:
        updateUI in class javax.swing.JMenu
        See Also:
        JComponent.updateUI()
      • getUIClassID

        public java.lang.String getUIClassID()
        Returns the name of the L&F class that renders this component.
        Overrides:
        getUIClassID in class javax.swing.JMenu
        Returns:
        the string "JideSplitButtonUI"
        See Also:
        JComponent.getUIClassID(), UIDefaults.getUI(javax.swing.JComponent)
      • isButtonSelected

        public boolean isButtonSelected()
        Returns the state of the button part of the JideSplitButton. True if the toggle button is selected, false if it's not.
        Returns:
        true if the toggle button is selected, otherwise false
      • setButtonSelected

        public void setButtonSelected​(boolean b)
        Sets the state of the button part of the JideSplitButton. Note that this method does not trigger an actionEvent. Call doClick to perform a programmatic action change.
        Parameters:
        b - true if the button is selected, otherwise false
      • isButtonEnabled

        public boolean isButtonEnabled()
        Returns the state of the button part of the JideSplitButton. True if the button is enabled, false if it's not.
        Returns:
        true if the button is enabled, otherwise false
      • setButtonEnabled

        public void setButtonEnabled​(boolean b)
        Sets the state of the button part of the JideSplitButton.
        Parameters:
        b - true if the button is enabled, otherwise false
      • getButtonStyle

        public int getButtonStyle()
        Gets the button style.
        Specified by:
        getButtonStyle in interface ButtonStyle
        Returns:
        the button style.
      • setButtonStyle

        public void setButtonStyle​(int buttonStyle)
        Sets the button style.
        Specified by:
        setButtonStyle in interface ButtonStyle
        Parameters:
        buttonStyle - the new button style.
      • isAlwaysDropdown

        public boolean isAlwaysDropdown()
        Checks the alwaysDropdown property value.
        Returns:
        true or false. If true, the split button doesn't have default action. It always drops down the menu when mouse clicks
      • setAlwaysDropdown

        public void setAlwaysDropdown​(boolean alwaysDropdown)
        If the property is true, the split button doesn't have default action. It always drops down the menu when mouse clicks. By default, this value is false.
        Parameters:
        alwaysDropdown - true or false.
      • setText

        public void setText​(java.lang.String text)
        Overrides:
        setText in class javax.swing.AbstractButton
      • getDefaultForeground

        public java.awt.Color getDefaultForeground()
      • setDefaultForeground

        public void setDefaultForeground​(java.awt.Color defaultForeground)
      • getBackgroundOfState

        public java.awt.Color getBackgroundOfState​(int state)
        Gets the background for different states. The states are defined in ThemePainter as constants. Not all states are supported by all components. If the state is not supported or background is never set, it will return null.

        Please note, each L&F will have its own way to paint the different backgrounds. This method allows you to customize it for each component to use a different background. So if you want the background to be used, don't use a ColorUIResource because UIResource is considered as a setting set by the L&F and any L&F can choose to ignore it.

        Specified by:
        getBackgroundOfState in interface ComponentStateSupport
        Parameters:
        state - the button state. Please refer to ThemePainter to see the list of available states.
        Returns:
        the background for different states.
      • setBackgroundOfState

        public void setBackgroundOfState​(int state,
                                         java.awt.Color color)
        Sets the background for different states. The states are defined in ThemePainter as constants. Not all states are supported by all components. If the state is not supported or background is never set, it will return null.

        Please note, each L&F will have its own way to paint the different backgrounds. This method allows you to customize it for each component to use a different background. So if you want the background to be used, don't use a ColorUIResource because UIResource is considered as a setting set by the L&F and any L&F can choose to ignore it.

        Specified by:
        setBackgroundOfState in interface ComponentStateSupport
        Parameters:
        state - the button state. Please refer to ThemePainter to see the list of available states.
        color - the background color
      • getForegroundOfState

        public java.awt.Color getForegroundOfState​(int state)
        Gets the foreground for different states. The states are defined in ThemePainter as constants. Not all states are supported by all components. If the state is not supported or foreground is never set, it will return null.

        Please note, each L&F will have its own way to paint the different foregrounds. This method allows you to customize it for each component to use a different foreground. So if you want the foreground to be used, don't use a ColorUIResource because UIResource is considered as a setting set by the L&F and any L&F can choose to ignore it.

        Specified by:
        getForegroundOfState in interface ComponentStateSupport
        Parameters:
        state - the button state. Please refer to ThemePainter to see the list of available states.
        Returns:
        the foreground for different states.
      • setForegroundOfState

        public void setForegroundOfState​(int state,
                                         java.awt.Color color)
        Sets the foreground for different states. The states are defined in ThemePainter as constants. Not all states are supported by all components. If the state is not supported or foreground is never set, it will return null.

        Please note, each L&F will have its own way to paint the different foregrounds. This method allows you to customize it for each component to use a different foreground. So if you want the foreground to be used, don't use a ColorUIResource because UIResource is considered as a setting set by the L&F and any L&F can choose to ignore it.

        Specified by:
        setForegroundOfState in interface ComponentStateSupport
        Parameters:
        state - the button state. Please refer to ThemePainter to see the list of available states.
        color - the background color
      • doClick

        public void doClick()
        Clicks on the button part of the JideSplitButton.
        Overrides:
        doClick in class javax.swing.AbstractButton
      • doClickOnMenu

        public void doClickOnMenu()
        Clicks on the drop down menu part of the JideSplitButton.
      • configurePropertiesFromAction

        protected void configurePropertiesFromAction​(javax.swing.Action action)
        Overrides:
        configurePropertiesFromAction in class javax.swing.JMenuItem
      • setIconFromAction

        protected void setIconFromAction​(javax.swing.Action action)
        By default, we will use large icon instead of small icon in the JMenuItem. You could override this method to set your own icon size.
        Parameters:
        action - the action.
      • actionPropertyChanged

        protected void actionPropertyChanged​(javax.swing.Action action,
                                             java.lang.String propertyName)
        Overrides:
        actionPropertyChanged in class javax.swing.JMenuItem
      • isSplitButtonEnabled

        public static boolean isSplitButtonEnabled​(javax.swing.Action action)
        Get if the split button is enable from the property stored inside the action.
        Parameters:
        action - the action
        Returns:
        true if the split button is enabled. Otherwise false.