Color selection components

A couple of weeks ago, a reader of this website requested an article about color-selection components. So Ed – this one’s for you :-)

Matlab includes a fully-documented uisetcolor function to enable color selection. uisetcolor uses a modal dialog window for this. To integrate this color-selection dialog in our GUI, simply add a uicontrol button or a menu item that call uisetcolor in their callback function.

An example of such an integrated control can be found in the uisetlineprops utility on the File Exchange, which I introduced earlier this month in my article on using a borderless button for setting plot properties:



Unfortunately, we often need to integrate color-selection components as a sub-component of an existing GUI, rather than as a stand-alone modal dialog window. This is not supported by uisetcolor.

Luckily, Matlab contains several internal Java-based color-selection components that can be integrated in our GUI. Being Java-based means that they work as advertised on any platform that runs Matlab. Matlab uses these components for different situations. For example, com.mathworks.beans.editors.ColorPicker is used by the property inspector as the editor for colors properties of Java objects, whereas Matlab color properties use another editor – (see below).

Swing’s JColorChooser

We start with Swing’s standard JColorChooser. This can easily be used in Matlab, just as any other Swing component. It can be added to our GUI using the built-in javacomponent function:

>> cc = javax.swing.JColorChooser;
>> [jColorChooser,container] = javacomponent(cc,[1,1,450,325],gcf);
>> jColorChooser.getColor
ans =

Swing's standard JColorChooser component

Swing's standard JColorChooser component

Note that JColorChooser should have a minimum size of about 425×325 pixels to appear uncropped.

Matlab ColorPicker components

com.mathworks.beans.editors.ColorPicker is an alternative component provided by Matlab:

>> cp = com.mathworks.beans.editors.ColorPicker;
>> [jColorPicker,container] = javacomponent(cp,[1,1,400,200],gcf);

Matlab's internal ColorPicker component

Matlab's internal ColorPicker component

The com.mathworks.beans.editors.ColorPicker object should not be confused with another internal ColorPicker object, namely The Beans editor ColorPicker is a simple stand-alone Java component that can be embedded GUI figures, whereas the MLWidgets ColorPicker is a Java button control that is used to present a popup-selection similar to a ColorDialog (see below):

options = 0;  icon = 0;
cp =,icon,'');
[jColorPicker,hContainer] = javacomponent(cp,[10,220,30,20],gcf);

a different Matlab ColorPicker a different Matlab ColorPicker a different Matlab ColorPicker  

a different Matlab ColorPicker
(note several possible button icons & popup options)

JIDE’s ColorComboBox

JIDE’s com.jidesoft.combobox.ColorComboBox is very similar to ColorPicker. Despite its name and appearance as a combo-box, it actually extends the basic JComponent, not JComboBox. It includes three separately-customizable sub-components: a color label, the color values, and the drop-down arrow button. All are shown by default (the color values may be hidden if the control is set too narrow):

JIDE's ColorComboBox

JIDE's ColorComboBox

ColorComboBox has a very nice feature, enabling manual modification of the color values (RGB) – the label’s color automatically changes once a new value has been entered (the <enter> key is pressed).

…and a few others

There are a few other color-selection controls. I won’t go into details here, but here are a couple of pointers to get you started:

  • com.mathworks.mwswing.MJColorComboBox is a simple extension of the standard Swing JComboBox that presents a color-selection drop-down control. Unfortunately, this control only works on Matlab releases up to 7.10 (R2010a) – it was removed in 7.11 (R2010b):

    Matlab's MJColorComboBox

    Matlab's MJColorComboBox

  • is the control used by Matlab for color selection in Matlab’s property inspector for Matlab handle objects. It can be displayed as either a modal dialog window or an embedded panel component:

    Matlab's ColorDialog

    Matlab's ColorDialog

  • com.mathworks.hg.util.dColorChooser is another control, which presents a panel grid of selectable colors:

    Matlab's dColorChooser

    Matlab's dColorChooser

Some final notes

It is fortunate to have such a wide selection of available components, although it is a pity that they are not fully documented and supported. Of course, there are many other 3rd-party color-selection components available, and these can also be integrated in your GUI – today I have only briefly discussed a few relevant built-in components.

Color-selection controls can also be embedded as sub-components in other GUI controls. For example, color-selection cells within data tables:

Color selection table cell editor and renderer

Color selection table cell editor and renderer

A more detailed report

I have prepared a 20-page PDF report about using color-selection components in Matlab, which greatly expands on the above. This report is available for $19 here (please allow up to 48 hours for email delivery).

Categories: GUI, Java, Medium risk of breaking in future versions, Undocumented feature

Tags: , , ,

Bookmark and SharePrint Print

12 Responses to Color selection components

  1. Ed Ross says:

    This info is awesome. The Beans editor ColorPicker is exactly what I was looking for but it’s sure nice to have all those other options as well. Thanks for responding so quickly to my request!

  2. dhruv jain says:

    thanks…..will be looking to paste question if i am not able to make a child components in parent gui………..really good one bydave…….

  3. Jesse dziedzic says:

    Wonderful post!!

  4. Red Kim says:

    I’m always find information in your Blog.
    ans also read this page. but I don’t know how to get color info
    in “”.
    I’d like get color info same to get “uigetcolor”.
    How to get it?
    and I’d like set default color…
    It like System Test Tool box “Plot – General”.

    • @Kim –

      cp = ColorPicker(ColorPicker.AUTO, ColorPicker.LINE_ICON, '');
      [jcp,hcontainer] = javacomponent(cp,[],gcf);
      color = cp.getValue;  % a java.awt.Color object
      color = cp.getValue.getColorComponents([])' * 255;   % an [R,G,B] array of values

      More information about ColorPicker, including its options and icons styles, can be found in section 5.4.1 of my Matlab-Java book.

    • Red Kim says:

      Thank you so much!!
      It’s working now!
      Your amazing guy!!

  5. Ronin says:

    Is it possible with some script or ui to edit the predefined colors that all the above mentioned color-selection tools seem to have in common? I personally dont ever use any other colors than given in the first 4 lines (white to black, red1… , red2…, and the one with green in it ). So the last 5 lines are just crap. Id really love to change them into more useful colors.

    Thanks in advance

  6. Paul says:

    Hi, I find your advice absolutely wonderful.
    However I can’t find a way to retrieve colour information from the com.mathworks.beans.editors.ColorPicker object (used as in example), even with your Red Kim answer.
    Would you have any idea why ?

    • Yair Altman says:

      @Paul – you can use the following object methods to retrieve the com.mathworks.beans.editors.ColorPicker‘s selected color:

      * getBlue() % returns int
      * getGreen() % returns int
      * getRed() % returns int
      * getSelectedColor() % returns java.awt.Color

      Red Kim referred to a different ColorPicker class (that happens to have the same class name), but it’s a different class in a different package so of course it has different behavior.

  7. Meade says:


    Another super useful post I’m just now finding!

    I have embedded this color picker within a context menu of a GUI I’ve built.
    My question is this:
    Is it possible to trigger a callback when the user clicks ‘OK’ in the widget?
    Using the code snippet you provided for @Red Kim, hopefully my intention is clear.

    Thanks so much for all the great insights.

    cp = ColorPicker(ColorPicker.AUTO, ColorPicker.LINE_ICON, '');
    [jcp,hcontainer] = javacomponent(cp,[],gcf);   % Need to trigger callback on selection here!
    % function MyCallback(hObj,evt)
    color = cp.getValue;  % a java.awt.Color object % This should be within the callback
    color = cp.getValue.getColorComponents([])' * 255;   % an [R,G,B] array of values
    % Do something with the color
    % end %MyCallback
    • meade says:


      I figured out my request. Posting it here for anyone else who may be curious.

      Thanks again!

       cp = ColorPicker(ColorPicker.AUTO, ColorPicker.LINE_ICON, '');
       [jcp,hcontainer] = javacomponent(cp,[],gcf);
       % !! Here's the key bit... This will trigger when user picks a color &amp; selects "OK" in widget
       set(jcp, 'ItemStateChangedCallback', {@MyCallback,gcf})
       function MyCallback(hObj,evt,hFigure)
            color = cp.getValue;  % a java.awt.Color object % This should be within the callback
            color = cp.getValue.getColorComponents([])' * 255;   % an [R,G,B] array of values
            % Do something with the color
       end %MyCallback

Leave a Reply

Your email address will not be published. Required fields are marked *