Setting Position of uiaxes within uipanel

4 views (last 30 days)
Eric Snyder
Eric Snyder on 31 Dec 2021
Commented: Rik on 6 Jan 2022
I want to create a GUI with variable numbers of uipanels depending on how many datasets are being examined (for instance, data from 4 instruments would display 4 uipanels.
Each panel should have a uislider and a plot displaying the data. Here's my code so far:
fig = uifigure('Name', 'Brush Detections');
fig.WindowState = 'maximized';
grd = uigridlayout(fig, [nplot, 1]);
% t{instrumentNumber} and x{instrumentNumber} are the time and amplitude data form each instrument
for iplot = 1:numInstruments
p(iplot) = uipanel(grd, 'Title', ['Receiver ', num2str(iplot)]);
% pause(2)
sld(iplot) = uislider(p(iplot), 'Position', [10, 30, 150, 3]);
ax(iplot) = uiaxes(p(iplot), 'Position', [180, 3, p(iplot).Position(3)-200, p(iplot).Position(4)-20]);
plot(ax(iplot), t{iplot}, x{iplot});
hold off
I'm trying to set the uiaxes to fill the remainder of the uipanel, but for some reason p(iplot).Position gives the incorrect value for the panel position. I believe this is because MATLAB hasn't finished executing all the uipanel properties before trying to execute the subsequent lines. I can get it to work properly most of the time if I put a "pause" after the p(iplot) = uipanel(grd, 'Title', ['Receiver ', num2str(iplot)]);, but the pause has to be over 2 seconds long to work consistently. Is there a way to pause only until the panel is fully generated? Or to link the uiaxes position to the uipanel position so if one updates the other does to? If the user resizes the uifigure window, it would be nice if the plot and sliders resized proportionally, too, if possible.

Accepted Answer

Rik on 31 Dec 2021
For automatically updating positions you should set the unit property to normalized.
As for the elements not being fully initialized, you could experiment with drawnow to force a graphics update.

Sign in to comment.

More Answers (0)




Community Treasure Hunt

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

Start Hunting!