Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set focus to a uifigure window

How can I set focus to a uifigure after the focus is switched out to a different figure?

For uicontrol, it is possible with set focus on one of its child elements. For example:

% create a new uicontrol text label
h = uicontrol('style','text','string','This is my figure');
% create a figure to switch the focus
figure;
% switch back
uicontrol(h)

However, for uifigure, adopting a similar code only creates a new uifigure.

Some code for you to try:

% create a new uifigure
h = uifigure('Name','This is my figure');
% create a new uilabel as a child of uifigure
lh = uilabel(h)
% create a figure to switch the focus
figure;
% this creates a new uifigure then switch back
uifigure(h)
% this creates an error as the first input argument must be a valid parent for uilabel
uilabel(lh)

Any idea, insight or contribution is appreciated.

Note your Matlab version should be at least 2016a, since this is when uifigure is introduced.

like image 699
Anthony Avatar asked Mar 08 '23 23:03

Anthony


1 Answers

This is yet another one of the casualties of The MathWorks' bizarre strategy of releasing a new UI framework before it actually has any features. Granted, the new framework shows a lot of promise, but it still lags far behind the older graphics system in terms of functionality.

Rant aside, there's a quick workaround that tests fine in R2017a: toggle the visibility of the uifigure, which brings it to the fore. Here's a basic example:

function uifigurepop(uifigurehandle)
drawnow;
uifigurehandle.Visible = 'off';
uifigurehandle.Visible = 'on';
end

Which, if we bring this into the sample code:

% create a new uifigure
h = uifigure('Name','This is my figure');
% create a new uilabel as a child of uifigure
lh = uilabel(h)
% create a figure to switch the focus
figure;
% this creates a new uifigure then switch back
uifigure()
uifigurepop(h);

Your figure is now rendered topmost on the screen.

like image 92
sco1 Avatar answered Mar 14 '23 23:03

sco1