Class ColorPicker

  • All Implemented Interfaces:
    ImageObserver, MenuContainer, Serializable, Accessible

    public class ColorPicker
    extends JPanel
    This is a panel that offers a robust set of controls to pick a color.

    This was originally intended to replace the JColorChooser. To use this class to create a color choosing dialog, simply call:
    ColorPicker.showDialog(frame, originalColor);

    However this panel is also resizable, and it can exist in other contexts. For example, you might try the following panel:
    ColorPicker picker = new ColorPicker(false, false);
    picker.setPreferredSize(new Dimension(200,160));
    picker.setMode(ColorPicker.HUE);

    This will create a miniature color picker that still lets the user choose from every available color, but it does not include all the buttons and numeric controls on the right side of the panel. This might be ideal if you are working with limited space, or non-power-users who don't need the RGB values of a color. The main() method of this class demonstrates possible ways you can customize a ColorPicker component.

    To listen to color changes to this panel, you can add a PropertyChangeListener listening for changes to the SELECTED_COLOR_PROPERTY. This will be triggered only when the RGB value of the selected color changes.

    To listen to opacity changes to this panel, use a PropertyChangeListener listening for changes to the OPACITY_PROPERTY.

    See Also:
    Serialized Form
    • Field Detail

      • strings

        protected static ResourceBundle strings
        The localized strings used in this (and related) panel(s).
      • SELECTED_COLOR_PROPERTY

        public static final String SELECTED_COLOR_PROPERTY
        PropertyChangeEvents will be triggered for this property when the selected color changes.

        (Events are only created when then RGB values of the color change. This means, for example, that the change from HSB(0,0,0) to HSB(.4,0,0) will not generate events, because when the brightness stays zero the RGB color remains (0,0,0). So although the hue moved around, the color is still black, so no events are created.)

        See Also:
        Constant Field Values
      • MODE_CONTROLS_VISIBLE_PROPERTY

        public static final String MODE_CONTROLS_VISIBLE_PROPERTY
        PropertyChangeEvents will be triggered for this property when setModeControlsVisible() is called.
        See Also:
        Constant Field Values
      • OPACITY_PROPERTY

        public static final String OPACITY_PROPERTY
        PropertyChangeEvents will be triggered when the opacity value is adjusted.
        See Also:
        Constant Field Values
      • MODE_PROPERTY

        public static final String MODE_PROPERTY
        PropertyChangeEvents will be triggered when the mode changes. (That is, when the wheel switches from HUE, SAT, BRI, RED, GREEN, or BLUE modes.)
        See Also:
        Constant Field Values
    • Constructor Detail

      • ColorPicker

        public ColorPicker()
        Create a new ColorPicker with all controls visible except opacity.
      • ColorPicker

        public ColorPicker​(boolean showExpertControls,
                           boolean includeOpacity)
        Create a new ColorPicker.
        Parameters:
        showExpertControls - the labels/spinners/buttons on the right side of a ColorPicker are optional. This boolean will control whether they are shown or not.

        It may be that your users will never need or want numeric control when they choose their colors, so hiding this may simplify your interface.

        includeOpacity - whether the opacity controls will be shown
    • Method Detail

      • setHexControlsVisible

        public void setHexControlsVisible​(boolean b)
        This controls whether the hex field (and label) are visible or not.

        Note this lives inside the "expert controls", so if setExpertControlsVisible(false) has been called, then calling this method makes no difference: the hex controls will be hidden.

      • setPreviewSwatchVisible

        public void setPreviewSwatchVisible​(boolean b)
        This controls whether the preview swatch visible or not.

        Note this lives inside the "expert controls", so if setExpertControlsVisible(false) has been called, then calling this method makes no difference: the swatch will be hidden.

      • setExpertControlsVisible

        public void setExpertControlsVisible​(boolean b)
        The labels/spinners/buttons on the right side of a ColorPicker are optional. This method will control whether they are shown or not.

        It may be that your users will never need or want numeric control when they choose their colors, so hiding this may simplify your interface.

        Parameters:
        b - whether to show or hide the expert controls.
      • getHSB

        public float[] getHSB()
        Returns:
        the current HSB coordinates of this ColorPicker. Each value is between [0,1].
      • getRGB

        public int[] getRGB()
        Returns:
        the current RGB coordinates of this ColorPicker. Each value is between [0,255].
      • getOpacity

        public float getOpacity()
        Returns the currently selected opacity (a float between 0 and 1).
        Returns:
        the currently selected opacity (a float between 0 and 1).
      • setOpacity

        public void setOpacity​(int v)
        Sets the currently selected opacity.
        Parameters:
        v - an int between 0 and 255.
      • setMode

        public void setMode​(ColorPicker.Mode mode)
        Sets the mode of this ColorPicker. This is especially useful if this picker is in non-expert mode, so the radio buttons are not visible for the user to directly select.
        Parameters:
        mode - must be HUE, SAT, BRI, RED, GREEN or BLUE.
      • setModeControlsVisible

        public void setModeControlsVisible​(boolean b)
        This controls whether the radio buttons that adjust the mode are visible.

        (These buttons appear next to the spinners in the expert controls.)

        Note these live inside the "expert controls", so if setExpertControlsVisible(false) has been called, then these will never be visible.

        Parameters:
        b -
      • getMode

        public ColorPicker.Mode getMode()
        Returns:
        the current mode of this ColorPicker.
        This will return HUE, SAT, BRI, RED , GREEN, or BLUE.

        The default mode is BRI, because that provides the most aesthetic/recognizable color wheel.

      • setColor

        public void setColor​(Color c)
        Sets the current color of this ColorPicker. This method simply calls setRGB() and setOpacity().
        Parameters:
        c - the new color to use.
      • setRGB

        public void setRGB​(int r,
                           int g,
                           int b)
        Sets the current color of this ColorPicker
        Parameters:
        r - the red value. Must be between [0,255].
        g - the green value. Must be between [0,255].
        b - the blue value. Must be between [0,255].
      • getColor

        public Color getColor()
        Returns:
        the current Color this ColorPicker has selected.

        This is equivalent to:
        int[] i = getRGB();
        return new Color(i[0], i[1], i[2], opacitySlider.getValue());

      • getExpertControls

        public JPanel getExpertControls()
        This returns the panel with several rows of spinner controls.

        Note you can also call methods such as setRGBControlsVisible() to adjust which controls are showing.

        (This returns the panel this ColorPicker uses, so if you put it in another container, it will be removed from this ColorPicker.)

        Returns:
        the panel with several rows of spinner controls.
      • setRGBControlsVisible

        public void setRGBControlsVisible​(boolean b)
        This shows or hides the RGB spinner controls.

        Note these live inside the "expert controls", so if setExpertControlsVisible(false) has been called, then calling this method makes no difference: the RGB controls will be hidden.

        Parameters:
        b - whether the controls should be visible or not.
      • setHSBControlsVisible

        public void setHSBControlsVisible​(boolean b)
        This shows or hides the HSB spinner controls.

        Note these live inside the "expert controls", so if setExpertControlsVisible(false) has been called, then calling this method makes no difference: the HSB controls will be hidden.

        Parameters:
        b - whether the controls should be visible or not.
      • setOpacityVisible

        public void setOpacityVisible​(boolean b)
        This shows or hides the alpha controls.

        Note the alpha spinner live inside the "expert controls", so if setExpertControlsVisible(false) has been called, then this method does not affect that spinner. However, the opacity slider is not affected by the visibility of the export controls.

        Parameters:
        b -
      • getColorPanel

        public ColorPalette getColorPanel()
        Returns:
        the ColorPickerPanel this ColorPicker displays.
      • setHSB

        public void setHSB​(float h,
                           float s,
                           float b)
        Sets the current color of this ColorPicker
        Parameters:
        h - the hue value.
        s - the saturation value. Must be between [0,1].
        b - the blue value. Must be between [0,1].
      • addLowerRightComponent

        public void addLowerRightComponent​(JComponent theComponent)
        Add a component to the lower-right corner between the vertical and the alpha-slider.
        Parameters:
        theComponent -