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)
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.

Accepted Answer

Tom
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')
else
nPanels = round(nPanels);
end
else
nPanels = 6;
end
%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))
end
function u = Panel_Gen(x,y,h,w)
u = uipanel('Units','Pixels',...
'Position',[x y w h]);
%listboxes:
uicontrol('Style','popup',...
'Parent',u,...
'Position',[10, 10, ((w-10)/2)-10 h-30],...
'String',{'One', 'Two' ,'Three'})
uicontrol('Style','popup',...
'Parent',u,...
'Position',[((w-10)/2) + 10, 10, ((w-10)/2)-10, h-30],...
'String',{'Uno', 'Dos', 'Tres'})
  3 Comments
Tom
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.

More Answers (2)

KIRAN kumar
KIRAN kumar on 29 Jun 2013
yeah the above one works try it!!!

Steven
Steven on 8 Jul 2013
great

Categories

Find more on Migrate GUIDE Apps in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!