GUI full screen with centred figure?

6 visualizaciones (últimos 30 días)
Nils
Nils el 31 de Mzo. de 2014
Respondida: Josep Llobet el 14 de Jul. de 2022
Hello,
let's say I have a 500 x 500 pixels GUI. When I set the resize funktion in the property inspector "on" and maximze the window my GUI will move to the left bottom and the rest of the screen is filled with the grey background colour.
Is it possible to have my GUI centred in the middle of the screen when I maximize the GUI?
Thanks in advance Nils
  1 comentario
Adam
Adam el 17 de Oct. de 2014
Do you want all the components to stay the same size or resize themselves to fill the same relative space that they did in the original size?
I tend to set all my GUI Components to have 'normalized' units so that when I resize the window they stay proportionally as they were. It isn't ideal, certainly for down-sizing, but it does avoid having all the GUI components just plonked in one corner.

Iniciar sesión para comentar.

Respuestas (3)

Jakob Sørensen
Jakob Sørensen el 31 de Mzo. de 2014
It is definitely possible to get the figure size using get(gcf, 'position'), and then calculate where the figure position should be, to be centered (as this depends only on figure size and axis size). There might be a simpler way, but not one I know.

Image Analyst
Image Analyst el 17 de Oct. de 2014
Editada: Image Analyst el 17 de Oct. de 2014
I found some of my programs broke with R2014b because I was using one of Yair's undocumented calls to maximize the GUI window:
% Function to maximize the window via undocumented Java call.
% Reference: http://undocumentedmatlab.com/blog/minimize-maximize-figure-window
FigurejFrame = get(handle(gcf),'JavaFrame');
FigurejFrame.setMaximized(true);
Unfortunately it barfs up a bunch of red java messages with R2014b.
Error using test (line 60)
Java exception occurred:
java.lang.NullPointerException
at com.mathworks.hg.peer.FigureFrameProxy.setMaximized(FigureFrameProxy.java:302)
at com.mathworks.hg.peer.FigureMediator.setMaximized(FigureMediator.java:468)
Is there an alternate method that you know about, other than using set(gcf, 'Position'....) which doesn't really maximize.
Even Yair's suggest fix for R2014b (HG2) does not work:
% Enlarge figure to full screen.
jFrame = get(handle(gcf),'JavaFrame');
% set(gcf,'Resize','off');
try
jFrame.fHG1Client.setMaximized(true); % HG1
catch
jFrame.fHG2Client.setMaximized(true); % HG2
end
drawnow;
pause(0.1);
UNLESS there's a breakpoint set anywhere in the try/catch - then it works fine. Bizarre.
  1 comentario
Adam
Adam el 17 de Oct. de 2014
Editada: Adam el 17 de Oct. de 2014
I've also had problems with using the undocumented functionality after the R2014b upgrade, but not to the extent I could really pin down the cause. Just seemed to be a general case of figures no longer being in focus when they were in R2014a for e.g. findjobj to work correctly or that functionality that used to work in the OpeningFcn of a GUI that now doesn't work presumably because the GUI is not visible yet and R2014b doesn't like that whereas R2014a was fine with it.
I also had functionality in a Resize function that was triggering before the GUI became visible that stopped working similarly.
Unfortunately I ran out of time on getting to the bottom of these so had to settle for inferior documented solutions or just worse UIs in some cases.

Iniciar sesión para comentar.


Josep Llobet
Josep Llobet el 14 de Jul. de 2022
Hello,
For obtain a centered GUI figure based on the screensize, in MATLAB App, you can try it:
% Obtain GUI position
UIFigure_position = app.UIFigure.Position; %100 100 602 389
% inici final amplada llargada
%Obtain screen position
screensize_position = get(0, 'ScreenSize'); % 1 1 1920 1080
% Construct new positions based on the screen and figure positions.
amplada_new = ceil(screensize_position(3)/2 - UIFigure_position(3)/2);
llargada_new = ceil(screensize_position(4)/2 - UIFigure_position(4)/2);
UIFigure_position_new = [amplada_new, llargada_new, UIFigure_position(3), UIFigure_position(4)];
% Add this position to the MATLAB App figure:
app.UIFigure.Position = UIFigure_position_new;
I am going to put it into a function in MATLAB File exchange
I hope will be useful

Categorías

Más información sobre Interactive Control and Callbacks en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by