GUI full screen with centred figure?

6 visualizzazioni (ultimi 30 giorni)
Nils
Nils il 31 Mar 2014
Risposto: Josep Llobet il 14 Lug 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 Commento
Adam
Adam il 17 Ott 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.

Accedi per commentare.

Risposte (3)

Jakob Sørensen
Jakob Sørensen il 31 Mar 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 il 17 Ott 2014
Modificato: Image Analyst il 17 Ott 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 Commento
Adam
Adam il 17 Ott 2014
Modificato: Adam il 17 Ott 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.

Accedi per commentare.


Josep Llobet
Josep Llobet il 14 Lug 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

Categorie

Scopri di più su Interactive Control and Callbacks in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by