Class JSplitButton

  • All Implemented Interfaces:
    java.awt.event.ActionListener, java.awt.event.MouseListener, java.awt.event.MouseMotionListener, java.io.Serializable, java.util.EventListener


    public class JSplitButton
    extends javax.swing.JButton
    implements java.awt.event.MouseMotionListener, java.awt.event.MouseListener, java.awt.event.ActionListener, java.io.Serializable
    An implementation of a "split" button.The left side acts like a normal button, right side has a jPopupMenu attached.
    This class raises two events.
    1. buttonClicked(e); //when the button is clicked
    2. splitButtonClicked(e; //when the split part of the button is clicked)
    You need to subscribe to SplitButtonActionListener to handle these events.

    Use as you wish, but an acknowlegement would be appreciated, ;)

    Known Issue:
    The 'button part' of the splitbutton is being drawn without the border??? and this is only happening in CDE/Motif and Metal Look and Feels. GTK+ and nimbus works perfect. No Idea why? if anybody could point out the mistake that'd be nice.My email naveedmurtuza[at]gmail.com

    P.S. The fireXXX methods has been directly plagarized from JDK source code, and yes even the javadocs..;)

    The border bug in metal L&F is now fixed. Thanks to Hervé Guillaume.
    See Also:
    Serialized Form
    • Nested Class Summary

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

        javax.swing.AbstractButton.AccessibleAbstractButton, javax.swing.AbstractButton.ButtonChangeListener
      • 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
      • Nested classes/interfaces inherited from class java.awt.Container

        java.awt.Container.AccessibleAWTContainer
      • Nested classes/interfaces inherited from class javax.swing.JButton

        javax.swing.JButton.AccessibleJButton
      • Nested classes/interfaces inherited from class javax.swing.JComponent

        javax.swing.JComponent.AccessibleJComponent
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected SplitButtonActionListener splitButtonActionListener  
      • 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 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 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 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

      Constructors 
      Constructor Description
      JSplitButton​()
      Creates a button with no set text or icon.
      JSplitButton​(java.lang.String text)
      Creates a button with text.
      JSplitButton​(java.lang.String text, javax.swing.Icon icon)
      Creates a button with initial text and an icon.
      JSplitButton​(javax.swing.Icon icon)
      Creates a button with an icon.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void actionPerformed​(java.awt.event.ActionEvent e)  
      void addSplitButtonActionListener​(SplitButtonActionListener l)
      Adds an SplitButtonActionListener to the button.
      java.awt.Color getArrowColor​()
      Gets the color of the arrow.
      int getArrowSize​()
      gets the size of the arrow.
      java.awt.Color getDisabledArrowColor​()
      gets the disabled arrow color
      java.awt.Image getImage​()
      Gets the image to be drawn in the split part.
      javax.swing.JPopupMenu getPopupMenu​()
      Returns the JPopupMenu if set, null otherwise.
      int getSeparatorSpacing​()
      Returns the separatorSpacing.
      int getSplitWidth​()
      Splitwidth is the width of the split part of the button.
      boolean isAlwaysDropDown​()
      Show the dropdown menu, if attached, even if the button part is clicked.
      void mouseClicked​(java.awt.event.MouseEvent e)  
      void mouseDragged​(java.awt.event.MouseEvent e)  
      void mouseEntered​(java.awt.event.MouseEvent e)  
      void mouseExited​(java.awt.event.MouseEvent e)  
      void mouseMoved​(java.awt.event.MouseEvent e)  
      void mousePressed​(java.awt.event.MouseEvent e)  
      void mouseReleased​(java.awt.event.MouseEvent e)  
      protected void paintComponent​(java.awt.Graphics g)  
      void removeSplitButtonActionListener​(SplitButtonActionListener l)
      Removes an SplitButtonActionListener from the button.
      void setAlwaysDropDown​(boolean alwaysDropDown)
      Show the dropdown menu, if attached, even if the button part is clicked.
      void setArrowColor​(java.awt.Color arrowColor)
      Set the arrow color.
      void setArrowSize​(int arrowSize)
      sets the size of the arrow
      void setDisabledArrowColor​(java.awt.Color disabledArrowColor)
      sets the disabled arrow color
      void setImage​(java.awt.Image image)
      Sets the image to draw instead of the triangle.
      void setPopupMenu​(javax.swing.JPopupMenu popupMenu)
      Sets the JPopupMenu to be displayed, when the split part of the button is clicked.
      void setSeparatorSpacing​(int separatorSpacing)
      Sets the separatorSpacing.Separator spacing is the space above and below the separator( the line drawn when you hover your mouse over the split part of the button).
      void setSplitWidth​(int splitWidth)
      Splitwidth is the width of the split part of the button.
      • Methods inherited from class javax.swing.AbstractButton

        actionPropertyChanged, addActionListener, addChangeListener, addImpl, addItemListener, checkHorizontalKey, checkVerticalKey, configurePropertiesFromAction, createActionListener, createActionPropertyChangeListener, createChangeListener, createItemListener, doClick, doClick, 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, getUI, getVerticalAlignment, getVerticalTextPosition, imageUpdate, init, isBorderPainted, isContentAreaFilled, isFocusPainted, isRolloverEnabled, isSelected, paintBorder, removeActionListener, removeChangeListener, removeItemListener, setAction, setActionCommand, setBorderPainted, setContentAreaFilled, setDisabledIcon, setDisabledSelectedIcon, setDisplayedMnemonicIndex, setEnabled, setFocusPainted, setHideActionText, setHorizontalAlignment, setHorizontalTextPosition, setIcon, setIconTextGap, setLabel, setLayout, setMargin, setMnemonic, setMnemonic, setModel, setMultiClickThreshhold, setPressedIcon, setRolloverEnabled, setRolloverIcon, setRolloverSelectedIcon, setSelected, setSelectedIcon, setText, setUI, setVerticalAlignment, setVerticalTextPosition
      • 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, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
      • 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 javax.swing.JButton

        getAccessibleContext, getUIClassID, isDefaultButton, isDefaultCapable, paramString, removeNotify, setDefaultCapable, 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, 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, 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.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • JSplitButton

        public JSplitButton​(java.lang.String text,
                            javax.swing.Icon icon)
        Creates a button with initial text and an icon.
        Parameters:
        text - the text of the button
        icon - the Icon image to display on the button
      • JSplitButton

        public JSplitButton​(java.lang.String text)
        Creates a button with text.
        Parameters:
        text - the text of the button
      • JSplitButton

        public JSplitButton​(javax.swing.Icon icon)
        Creates a button with an icon.
        Parameters:
        icon - the Icon image to display on the button
      • JSplitButton

        public JSplitButton​()
        Creates a button with no set text or icon.
    • Method Detail

      • getPopupMenu

        public javax.swing.JPopupMenu getPopupMenu​()
        Returns the JPopupMenu if set, null otherwise.
        Returns:
        JPopupMenu
      • setPopupMenu

        public void setPopupMenu​(javax.swing.JPopupMenu popupMenu)
        Sets the JPopupMenu to be displayed, when the split part of the button is clicked.
        Parameters:
        popupMenu -
      • getSeparatorSpacing

        public int getSeparatorSpacing​()
        Returns the separatorSpacing. Separator spacing is the space above and below the separator( the line drawn when you hover your mouse over the split part of the button).
        Returns:
        separatorSpacingimage = null; //to repaint the image with the new size
      • setSeparatorSpacing

        public void setSeparatorSpacing​(int separatorSpacing)
        Sets the separatorSpacing.Separator spacing is the space above and below the separator( the line drawn when you hover your mouse over the split part of the button).
        Parameters:
        separatorSpacing -
      • isAlwaysDropDown

        public boolean isAlwaysDropDown​()
        Show the dropdown menu, if attached, even if the button part is clicked.
        Returns:
        true if alwaysDropdown, false otherwise.
      • setAlwaysDropDown

        public void setAlwaysDropDown​(boolean alwaysDropDown)
        Show the dropdown menu, if attached, even if the button part is clicked.
        Parameters:
        alwaysDropDown - true to show the attached dropdown even if the button part is clicked, false otherwise
      • getArrowColor

        public java.awt.Color getArrowColor​()
        Gets the color of the arrow.
        Returns:
        arrowColor
      • setArrowColor

        public void setArrowColor​(java.awt.Color arrowColor)
        Set the arrow color.
        Parameters:
        arrowColor -
      • getDisabledArrowColor

        public java.awt.Color getDisabledArrowColor​()
        gets the disabled arrow color
        Returns:
        disabledArrowColor color of the arrow if no popup attached.
      • setDisabledArrowColor

        public void setDisabledArrowColor​(java.awt.Color disabledArrowColor)
        sets the disabled arrow color
        Parameters:
        disabledArrowColor - color of the arrow if no popup attached.
      • getSplitWidth

        public int getSplitWidth​()
        Splitwidth is the width of the split part of the button.
        Returns:
        splitWidth
      • setSplitWidth

        public void setSplitWidth​(int splitWidth)
        Splitwidth is the width of the split part of the button.
        Parameters:
        splitWidth -
      • getArrowSize

        public int getArrowSize​()
        gets the size of the arrow.
        Returns:
        size of the arrow
      • setArrowSize

        public void setArrowSize​(int arrowSize)
        sets the size of the arrow
        Parameters:
        arrowSize -
      • getImage

        public java.awt.Image getImage​()
        Gets the image to be drawn in the split part. If no is set, a new image is created with the triangle.
        Returns:
        image
      • setImage

        public void setImage​(java.awt.Image image)
        Sets the image to draw instead of the triangle.
        Parameters:
        image -
      • paintComponent

        protected void paintComponent​(java.awt.Graphics g)
        Overrides:
        paintComponent in class javax.swing.JComponent
        Parameters:
        g -
      • addSplitButtonActionListener

        public void addSplitButtonActionListener​(SplitButtonActionListener l)
        Adds an SplitButtonActionListener to the button.
        Parameters:
        l - the ActionListener to be added
      • removeSplitButtonActionListener

        public void removeSplitButtonActionListener​(SplitButtonActionListener l)
        Removes an SplitButtonActionListener from the button. If the listener is the currently set Action for the button, then the Action is set to null.
        Parameters:
        l - the listener to be removed
      • mouseMoved

        public void mouseMoved​(java.awt.event.MouseEvent e)
        Specified by:
        mouseMoved in interface java.awt.event.MouseMotionListener
        Parameters:
        e -
      • actionPerformed

        public void actionPerformed​(java.awt.event.ActionEvent e)
        Specified by:
        actionPerformed in interface java.awt.event.ActionListener
        Parameters:
        e -
      • mouseExited

        public void mouseExited​(java.awt.event.MouseEvent e)
        Specified by:
        mouseExited in interface java.awt.event.MouseListener
        Parameters:
        e -
      • mouseDragged

        public void mouseDragged​(java.awt.event.MouseEvent e)
        Specified by:
        mouseDragged in interface java.awt.event.MouseMotionListener
      • mouseClicked

        public void mouseClicked​(java.awt.event.MouseEvent e)
        Specified by:
        mouseClicked in interface java.awt.event.MouseListener
      • mousePressed

        public void mousePressed​(java.awt.event.MouseEvent e)
        Specified by:
        mousePressed in interface java.awt.event.MouseListener
      • mouseReleased

        public void mouseReleased​(java.awt.event.MouseEvent e)
        Specified by:
        mouseReleased in interface java.awt.event.MouseListener
      • mouseEntered

        public void mouseEntered​(java.awt.event.MouseEvent e)
        Specified by:
        mouseEntered in interface java.awt.event.MouseListener