how to change each cell color in a uitable
    111 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Mahmoud Hassan Eldally
 el 31 de Dic. de 2011
  
    
    
    
    
    Comentada: Craig
 el 24 de Jul. de 2024
            I wonder how can i make a uitable such that cells at this table has different background colorsand each column has different width
thank you
1 comentario
  Emmanuelle Fried
 el 28 de Jun. de 2021
				Use addStyle:
uit = uitable(...);
s = uistyle('BackgroundColor','red');
addStyle(uit,s,'column',2)
Respuesta aceptada
  Friedrich
    
 el 3 de En. de 2012
        
      Editada: Eric Sargent
    
 el 11 de Feb. de 2023
  
      Update:
f = uifigure;
uit = uitable(f, Data = "hi");
s = uistyle('BackgroundColor','red');
addStyle(uit,s,'column',1)
Original Answer
Hi,
this is pretty tricky within an uitable since the text you display will have a red background and not the full cell in the table:
uitable('Data',{'<body bgcolor="#FF0000">Hello</body>'})
You will see that Hello has a read background but thats all.
So we can do a small trick. Instead of adding the text we add a html table which contains the text. In addition this html table is sooooo wide that it needs the full cell^^:
uitable('Data',{'<table border=0 width=400 bgcolor=#FF0000><TR><TD>Hello</TD></TR> </table>' })
So overall you can do a colored table like this:
colergen = @(color,text) ['<table border=0 width=400 bgcolor=',color,'><TR><TD>',text,'</TD></TR> </table>'];
data = {  2.7183        , colergen('#FF0000','Red')
         'dummy text'   , colergen('#00FF00','Green')
         3.1416         , colergen('#0000FF','Blue')
         }
uitable('data',data)
14 comentarios
  Craig
 el 24 de Jul. de 2024
				Eric Sargent, it would appear that uistyle, addStyle, and removeStyle functions only work on uitable when the uitable is made in a uifigure, but not when a uitable is made in figure.  That has me stuck at the moment.
Error using matlab.ui.control.Table/addStyle (line 63)
Functionality not supported with figures created with the figure function.
Más respuestas (5)
  Philip
      
 el 31 de Mzo. de 2017
        In Matlab 2017a (and at least as far back as 2013b) this has improved. The uitable now has a "BackgroundColor" property. This is an array of n rows and 3 columns, RGB values between 0 and 1. It appears that if this array has less rows than the data in the table, then the colours are repeated throughout the table.
To highlight a single row, create a colour array the same size as your data and specify the row of interest as the colour you want.
This is how the alternating row colours are created (and so those colours can be changed if you want as well).
1 comentario
  Torsion27
 el 24 de Abr. de 2018
				Hello, that is my way to try to get the GUI uitable BAckgroundColor changed. But it is only changing the whole uitable. I want it to just change the row of the checkbox green if the checkbox is 1 and if checkbox is 0, change to red background of the row. Thanks for your help. best regards
function pushbutton2_Callback(hObject, eventdata, handles)
global pushbutton
 [num,txt,raw]= xlsread(uigetfile ({'.xlsx'}))anzahl_kriterien = size([raw],1)% --> aendern
kriterium = cell(anzahl_kriterien);
tabledata = [num2cell(true(length(raw),1)),raw];
set(handles.uitable3, 'data',tabledata) setappdata(handles.uitable3,'RawTableDat',raw)
% --- Executes when entered data in editable cell(s) in uitable3. function uitable3_CellEditCallback(hObject, eventdata, handles) tabledata=get(handles.uitable3,'Data');
spalte1=tabledata(:,1) spalte2=tabledata(:,2)
zeilenanzahl=length(tabledata);
% uitablehandles=findobj(handles.uitable3); for j = 1:1:zeilenanzahl %für zeile 1 bis ende
    if (spalte1{j,1}==1)          tabledata{j,2}=spalte2{j,1}set(handles.uitable3,'BackgroundColor',[0 1 0])
end
for j = 1:1:zeilenanzahl
    if (tabledata{j,1}==0)  tabledata{j,2}= set(handles.uitable3,'BackgroundColor',[1 0 0])end end end
guidata(hObject,handles);
 % --- Executes during object creation, after setting all    properties.
  function uitable3_CreateFcn(hObject, eventdata, handles)
  hObject.ColumnFormat = {'logical',[]}; 
  hObject.ColumnEditable = logical([1 0]); 
      
  Walter Roberson
      
      
 el 31 de Dic. de 2011
        4 comentarios
  Rohail Razzaq
 el 15 de Abr. de 2015
				what if i have to use a particular variable instead of a specific text in the following line :
html<font color="blue">'my text'</font></html>
  Torsion27
 el 22 de Abr. de 2018
        
      Editada: Walter Roberson
      
      
 el 23 de Abr. de 2018
  
      Hey, i have a similar problem with a Gui uitable and it would be great if you can help me with that. Thaks a lot :)
0 comentarios
  Torsion27
 el 24 de Abr. de 2018
        Hello, that is my way to try to get the GUI uitable BAckgroundColor changed. But it is only changing the whole uitable. I want it to just change the row of the checkbox green if the checkbox is 1 and if checkbox is 0, change to red background of the row. Thanks for your help. best regards
 function pushbutton2_Callback(hObject, eventdata, handles)
 global pushbutton
 [num,txt,raw]= xlsread(uigetfile ({'.xlsx'}))
 anzahl_kriterien = size([raw],1)% --> aendern
 kriterium =  cell(anzahl_kriterien);
 tabledata = [num2cell(true(length(raw),1)),raw];%das nur einmal checkbox spalte da ist und am anfang
 set(handles.uitable3, 'data',tabledata)
 setappdata(handles.uitable3,'RawTableDat',raw)
 % --- Executes when entered data in editable cell(s) in uitable3.
 function uitable3_CellEditCallback(hObject, eventdata, handles)
 tabledata=get(handles.uitable3,'Data');
 spalte1=tabledata(:,1) 
 spalte2=tabledata(:,2)
 zeilenanzahl=length(tabledata); 
for j = 1:1:zeilenanzahl %für zeile 1 bis ende
    if (spalte1{j,1}==1)   
       tabledata{j,2}=spalte2{j,1}
       set(handles.uitable3,'BackgroundColor',[0 1 0]) 
    end
for j = 1:1:zeilenanzahl  
    if (tabledata{j,1}==0) 
 tabledata{j,2}= set(handles.uitable3,'BackgroundColor',[1 0 0])
 end
  end 
 end
 guidata(hObject,handles);
 % --- Executes during object creation, after setting all properties.
  function uitable3_CreateFcn(hObject, eventdata, handles)
  hObject.ColumnFormat = {'logical',[]};
  hObject.ColumnEditable = logical([1 0]);
1 comentario
  Himanshu Verma
 el 19 de Mayo de 2020
				Hi there...
Did you find any solution to this problem? I'm also looking for the same.
Ver también
Categorías
				Más información sobre Ordinary Differential Equations en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!















