Search code examples
listmatlabuicontrol

MATLAB: uicontrol and Lists


In MATLAB, I have the following data:

mass = [ 23 45 44]
velocity = [34 53 32]
time = [1 2 3]
acceleration = [32 22 12]
speed = [12 33 44]

What I'm trying to achieve is to apply uicontrol that creates two lists with this data (mass, velocity, time, acceleration, speed), and have the ability to click on one of the variables (mass) in each column and there is a numerical data output, like mass = 23 45 44

Output: numerical data stored in these variables

Here is the code:

function learnlists()
figure;
yourcell={'mass','velocity','time','acceleration','speed'}
hb = uicontrol('Style', 'listbox','Position',[100 100 200 200],...
'string',yourcell,'Callback',@measurements)

yourcell={'mass','velocity','time','acceleration','speed'}
hc = uicontrol('Style', 'listbox','Position',[300 100 200 200],...
'string',yourcell,'Callback',@measurements)


function [out] = measurements(hb,evnt)
outvalue = get(hb,'value');

v = get(hb,'value')
if v == 1
    mass = [1 2  3 4 5]
elseif v == 2
     velocity = [ 1 2 3 4 5]

end

end

   end

Thanks,

Amanda


Solution

  • I suggest you to not use a function to keep things simpler and keep all the variables in your base workspace.

    Here is an example for one list box:

    mass = [ 23 45 44];
    velocity = [34 53 32];
    time = [1 2 3];
    acceleration = [32 22 12];
    speed = [12 33 44];
    
    figure;
    yourcell = {'mass','velocity','time','acceleration','speed'};
    hb = uicontrol('Style', 'listbox','Position',[100 100 200 200],...
         'string',yourcell,'Callback',...
         ['switch get(hb, ''Value''), ',...
         'case 1, mass, ',...
         'case 2, velocity, ',...
         'case 3, time, ',...
         'case 4, acceleration, ',...
         'case 5, speed, ',...
         'end']);
    

    However this displays in command window, you could change the code to show it in a text box in your gui.

    You can also execute a script as the Callback function.

    hb = uicontrol('Style', 'listbox','Position',[100 100 200 200],...
         'string',yourcell,'Callback', 'myScript');
    

    and then create an m-script in your directory: (myScript.m)

    switch get(hb, 'Value')
        case 1
            mass
        case 2
            velocity
        case 3
            time
        case 4
            acceleration
        case 5
            speed
    end
    

    Note that everything is still in your base workspace.

    Hope it helps.