MATLAB Answers

Is it possible to create "x" amount of objects with pop-up menus in GUI depending on the user input?

1 view (last 30 days)
David (degtusmc)
David (degtusmc) on 28 Jun 2013
Hello everyone,
I am in the process of designing a Matlab GUI and I was wondering if what I want to do is even possible. If it is, I would appreciate if I can be pointed in the right direction.
The user will input a number in a text box. This number will be the amount of objects that will be created (inside the GUI). Each object will have two different menus with additional options. Am I able to accomplish this using Matlab GUI?
Thank you in advance for any help provided.


Sign in to comment.

Accepted Answer

Tom on 28 Jun 2013
Edited: Tom on 29 Jun 2013
You can do it programatically, using the UICONTROL function
function Create_Panels(varargin)
%tile a series of panels, each containing two listboxes
%argument 1: number of panels to create (otherwise default of 6)
if nargin > 0
nPanels = varargin{1};
if ~isnumeric(nPanels) || numel(nPanels) ~= 1 || nPanels < 1
error('please enter an integer greater than 0')
nPanels = round(nPanels);
nPanels = 6;
%create figure
figPos = [100 50 1000 600];
F = figure('Position',figPos);
%gaps between panels
horzSpc = 10;
vertSpc = 10;
%arrange tiling of panels
nHorz = ceil(sqrt(nPanels));
nVert = round(nPanels/nHorz);
[gridHorz gridVert] = meshgrid(1:nVert,1:nHorz);
%calculate panel size
panelHeight = round((figPos(4) - vertSpc) / nVert -vertSpc);
panelWidth = round((figPos(3) - horzSpc) / nHorz -horzSpc);
u = zeros(nPanels,1);
for n = 1:nPanels
x = horzSpc + (gridVert(n)-1)*(panelWidth + horzSpc);
y = vertSpc + (gridHorz(n)-1)*(panelHeight + vertSpc);
u(n) = Panel_Gen(x,y,panelHeight,panelWidth);
set(u(n),'Title',sprintf('Panel %d',n))
function u = Panel_Gen(x,y,h,w)
u = uipanel('Units','Pixels',...
'Position',[x y w h]);
'Position',[10, 10, ((w-10)/2)-10 h-30],...
'String',{'One', 'Two' ,'Three'})
'Position',[((w-10)/2) + 10, 10, ((w-10)/2)-10, h-30],...
'String',{'Uno', 'Dos', 'Tres'})


David (degtusmc)
David (degtusmc) on 29 Jun 2013
Great! Thank you for the rapid response. Now I know it is possible to do and I will give it a shot. Is it OK if I get back to you if further questions come up?
Tom on 29 Jun 2013
Sure, but if it's not directly related to my code then I'd ask it as a new question so more people have the chance to look at it.
David (degtusmc)
David (degtusmc) on 1 Jul 2013
Thank you Tom. I tried your suggestion and it worked. Is there a way to create the panels under the input text box, rather than opening new windows (figures)? The reason, I am asking is because I would like to have more control over the amount of objects created (i.e. adding or removing panels).

Sign in to comment.

Sign in to answer this question.