Make UIAxes invisible/visible when stacked in App desginer..

21 views (last 30 days)
I'm using App designer to desing an app.. I have a couple of UIAxes stacked above each other, and am trying to set ones I want to see to being visible and the others to not visible, using:
app.UIAxes.Visible = 'off';
Which works fine, but the UIAxes below remains hidden! For example if I have two axes overlapping only partially, and make the one 'on top' invisible, the one 'on top' goes, but the portion on the other axes which was hidden, remains hidden!!
Frustating problem, any solutions would be great!

Accepted Answer

Adam Danz
Adam Danz on 1 Oct 2019
Edited: Adam Danz on 20 Sep 2020
Update: Starting in Matlab r2020b, change the stack order of UI components in App Designer using the reorder tool (see release notes).
----------------------------------------------------------------------------------------
Unfortunately uistack() is not functional with UIFigures (prior to r2020b). Here's a function you could embed in your app that will put an object on top of the UI stack. Add the function by opening the app in app designer, go to code view, select functions, and add the function by pressing the green "+" under the Code Browser. Then call the function any time an object needs to be moved to top. Unfortunately the app image will flicker during the restack as the objects are redrawn.
function uistackTop(~, appfig, obj)
% Place the UI object 'obj' on top of stack in the UIfigure 'appfig'
appHandles = appfig.Children; % list all handles in app
hIdx = find(appHandles==obj); % find index of obj in appHandles
% Create new index order of app handles
newOrder = [hIdx,setdiff(1:numel(appHandles),hIdx)];
% assign new stack order to app
appfig.Children = appHandles(newOrder);
Example:
appfig = app.myAppFig; % Handle to your App figure
obj = app.UIAxes2; % handle to the object that goes on top
uistackTop(app, appfig, obj)
Also see this answer for a function that moves a UI object to the bottom of the stack.
  2 Comments
Jack Latham
Jack Latham on 4 Oct 2019
Thank you for the answer! I ended up plotting to a Panel and making new axis instead when I wanted the new view, this solution may be better
Adam Danz
Adam Danz on 4 Oct 2019
That's not a bad idea.
Another idea might be to use UI Tabs. Instead of making new axes or changing the UI stack, you can just switch back and forth between tabs that are all located in the same position.

Sign in to comment.

More Answers (0)

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!