Javacomponent background color

In this website, I have often shown how Matlab application functionality can be significantly enhanced by including Java components in the Matlab GUI, using the built-in semi-documented javacomponent function (which I described here last year).

Using java components in Matlab is simple and easy, but there are a few annoying catches. One of these is the fact that the default Matlab figure background color ([0.8, 0.8, 0.8]) is a different shade of gray than the default uicontrol background color ([0.9255, 0.9137, 0.847]). javacomponents use the same background color as uicontrols.

hPanel = uipanel('units','pixe', 'pos',[30,30,200,100], 'title','Matlab uipanel');
jLabel = javax.swing.JLabel('Java Label');
[jhlabel,jContainer]=javacomponent(jLabel, [250,50,100,50], gcf);

Javacomponents use different default background color than figures

Javacomponents use different default background color than figures

While Matlab users are familiar with updating Matlab colors, doing so with Java colors is a bit different. We have two basic ways to align the javacomponent background color with the figure’s: either change the figure’s Color property to the Java component’s bgcolor, or vice versa:

Changing the javacomponent‘s background color to the figure color

% Fix the Java component:
% Variant #1
bgcolor = get(gcf, 'Color');
jLabel.setBackground(java.awt.Color(bgcolor(1),bgcolor(2),bgcolor(3)));
 
% Variant #2
bgcolor = num2cell(get(gcf, 'Color'));
jLabel.setBackground(java.awt.Color(bgcolor{:}));
 
% Fix the Matlab panel uicontrol
set(hPanel, 'BackgroundColor', get(gcf,'Color'));

controls with fixed background colors

controls with fixed background colors

Changing the figure’s color to the javacomponent‘s background color

bgcolor = jLabel.getBackground.getComponents([]);
set(gcf, 'Color', bgcolor(1:3));

figure with modified color to match the controls

figure with modified color to match the controls

Look at the list of related posts below for other articles related to colors in Matlab.

Categories: GUI, Java, Low risk of breaking in future versions, Semi-documented function, Undocumented feature

Tags: , ,

Bookmark and SharePrint Print

3 Responses to Javacomponent background color

  1. Panos says:

    hello,

    (How) is it possible to place the panel label(name) someplace else than the top of it?
    thanks in advance

  2. Peng Liu says:

    Hello Yair,

    is it possible to set transparency of javacomponents backgroud color? I tried setBackground(java.awt.Color(1, 0.98, 0.94, 0.5)) of my Spinning icon which I learned from your article as well. Here 0.5 defines the Alpha. But only at start and at end the transparency works. While the Spinning Icon runs, it doesn’t works. May you have some idea or Solutions?

Leave a Reply

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