MATLAB Answers

How can I control the stacking order of objects in appdesigner?

138 ビュー (過去 30 日間)
Kevin J. Delaney
Kevin J. Delaney 2018 年 1 月 4 日
コメント済み: paul harder 2020 年 8 月 28 日
How can I control the stacking order of objects in appdesigner? It seems to be determined by the order in which the panels or axes are created. What if I want an object created later to slide underneath earlier objects?

採用された回答

Sean de Wolski
Sean de Wolski 2018 年 1 月 4 日
You can control the order of the 'Children' of a graphics object directly:
fig = uifigure;
panel1 = uipanel(fig, 'BackgroundColor', 'b');
panel2 = uipanel(fig, 'BackgroundColor', 'r');
fig.Children = flip(fig.Children)
  6 件のコメント
paul harder
paul harder 2020 年 8 月 28 日
Yes, intuitively I should be able to drag panels up and down the component browser to order the stacking. It seems like the stack order is tied to the order of creation, which is super inflexible.

サインインしてコメントする。

その他の回答 (2 件)

Kevin J. Delaney
Kevin J. Delaney 2018 年 2 月 7 日
Inspired by Sean's answer, I wrote the attached utility for use in the startupFcn:
move_to_bottom(app.UIFigure, app.Axes);

Wouter
Wouter 2018 年 2 月 14 日
You could also keep a list of handles; e.g. in the variable background and than move all of these to the background.
hfig = uifigure; % create figure
hax = uiaxes(hfig); % create axis
foreground = plot(hax,rand(1,100),'r'); % create red line
hold(hax,'on');
for ind = 1:10
% this moves the foreground plot to the background...
background(ind) = plot(hax,rand(1,100),'k'); % create 10 ack lines (on top of red line)
end
% move the background lines to the background!
ch = get(hax,'children'); % get all plots from hax
[~,neworder] = sort(ismember(ch,background)); % reorder the handles to move the background lines to the background
set(hax,'children',ch(neworder)); % set the new order of all lines

Community Treasure Hunt

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

Start Hunting!

Translated by