MATLAB Answers

Change Color of each individual String in a Listbox ?

175 views (last 30 days)
Max Müller
Max Müller on 1 Sep 2014
Commented: Adam on 1 Nov 2019
Hey Guys,
I want to give each Word in my List box an specific color. My mentor said: its not possible. Now I ask here: is it possible to chose the Color of Listbox text with the RGB system ?

  0 Comments

Sign in to comment.

Accepted Answer

Adam
Adam on 2 Sep 2014
Edited: Adam on 2 Sep 2014
Data(1).name = 'red';
Data(1).Color = [255 0 0];
Data(2).name = 'green';
Data(2).Color = [0 255 0];
Data(3).name = 'blue';
Data(3).Color = [0 0 255];
pre = '<HTML><FONT color="';
post = '</FONT></HTML>';
listboxStr = cell(numel( Data ),1);
for i = 1:numel( Data )
str = [pre rgb2Hex( Data(i).Color ) '">' Data(i).name post];
listboxStr{i} = str;
end
figure; hListBox = uicontrol('Style','list', 'Position', [20 20 100 100], 'String', listboxStr );
That should give you an example of what you want with the following function defined based on Guillame's input above :
function hexStr = rgb2Hex( rgbColour )
hexStr = reshape( dec2hex( rgbColour, 2 )',1, 6);
Obviously if you have a pre-existing listbox from Guide you can just do the usual:
set( handles.listbox1, 'String', listboxStr )
instead of creating a new listbox.

  9 Comments

Show 6 older comments
Guillaume
Guillaume on 3 Sep 2014
The colours and names are embedded in the strings, so you could parse them:
liststrings = get(hlistbox, 'string');
colnames = regexp(liststrings, 'color="(.*)">(.*)</FONT', 'tokens', 'once');
data = cell2struct(reshape([colnames{:}], 2, []), {'color', 'name'});

Sign in to comment.

More Answers (4)

Adam
Adam on 1 Sep 2014
Slightly modified example of code Yair Altman posted many years ago:
figure; uicontrol('Style','list', 'String', ...
{'<HTML><FONT color="red">Red</FONT></HTML>', ...
'<HTML><FONT color="green">Green</FONT></HTML>', ...
'<HTML><FONT color="blue">Blue</FONT></HTML>'} );

  7 Comments

Show 4 older comments
Yair Altman
Yair Altman on 4 Sep 2014
And related code/images (note that it's case-insensitive and that you don't have to close the HTML tags):
uicontrol('Style','list', 'Position',[10,10,70,70], 'String', ...
{'<HTML><FONT color="red">Hello</Font></html>', 'world', ...
'<html><font style="font-family:impact;color:green"><i>What a', ...
'<Html><FONT color="blue" face="Comic Sans MS">nice day!</font>'});
Keqin Xu
Keqin Xu on 31 Oct 2019
Trouble is, when there are "<" in the string, the "<" are all missing in the listbox!
Any ideas to fix it? Thanks!

Sign in to comment.


Max Müller
Max Müller on 1 Sep 2014
but i very new to programing..... can u pls explain me, how I cant set the ListboxInput and color each Word with a special Color (RGB)

  4 Comments

Show 1 older comment
Guillaume
Guillaume on 1 Sep 2014
Well, hex colour code is just red, green, blue (in that order) encoded as 2 bytes hexadecimal on a scale of 0 to 255.
e.g: red = 0, green = 126 (7E), blue = 255 (FF) => hex = 007EFF
Adam
Adam on 1 Sep 2014
dec2hex( [r g b] )
should help convert between the two, although you have to scoop up the 3 rows of the result into a single string to put into the html string.
Guillaume
Guillaume on 2 Sep 2014
That would be:
reshape(dec2hex([r g b], 2)',1, 6)

Sign in to comment.


Max Müller
Max Müller on 2 Sep 2014
it sucks

  1 Comment

Image Analyst
Image Analyst on 2 Sep 2014
Max, this is not an official "Answer" to your original question. If anything, it should have been a Comment to some other response.

Sign in to comment.


Max Müller
Max Müller on 2 Sep 2014
I just need an interactive way to show some text with a unique color and give this thing an on click callback.

  2 Comments

Adam
Adam on 2 Sep 2014
Please don't keep adding new questions as answers, it is confusing.
You can define the colour of independent static text objects easily enough (or indeed any independent objects like that if they are predefined).
If you want to have different coloured backgrounds or text in a listbox or uitable or similar though then I'm not aware of any alternative to using html and/or the underlying java UI programming as discussed in previous answers.
If you can explain which element of the suggested solution you are having a problem with we can assist further on that.
Max Müller
Max Müller on 2 Sep 2014
Imagine i have a structure called Data.
Data.name
Data.Color
are its Input. Now I want to write the names into a Listbox and give the String the Color form Data.Color.

Sign in to comment.

Sign in to answer this question.