File Exchange

image thumbnail

getjframe - Retrieves a figure's underlying Java frame

version 1.6.0.0 (3.53 KB) by Yair Altman
Enable multiple window callbacks and properties not exposed by Matlab

8 Downloads

Updated 01 Mar 2019

View License

Syntax:
jframe = getjframe(hFigOrComponent)

Description:
GETJFRAME retrieves the current figure (gcf)'s underlying Java frame, thus enabling access to all 35 figure callbacks that are not exposed by Matlab's figure.

Notable callbacks include: FocusGainedCallback, FocusLostCallback, KeyPressedCallback, KeyReleasedCallback, MouseEnteredCallback, MouseExitedCallback, MousePressedCallback, MouseReleasedCallback, WindowActivatedCallback, WindowClosedCallback, WindowClosingCallback, WindowOpenedCallback, WindowStateChangedCallback and 22 others.

The returned jframe object also allows access to other useful window features: 'AlwaysOnTop', 'CloseOnEscapeEnabled', 'Resizable', 'Enabled', 'HWnd' (for those interested in Windows integration) etc. Type "get(jframe)" to see the full list of properties.

GETJFRAME(hFig) retrieves a specific figure's underlying Java frame. hFig is a Matlab handle, or a list of handles (not necessarily figure handle(s) - the handles' containing figure is used).

Usage examples:
get(getjframe,'ListOfCallbacks'); %display list of supported callbacks
set(getjframe,'WindowStateChangedCallback','disp(''Window min/maxed'')')
set(getjframe,'WindowDeiconifiedCallback',@winMaximizedCallback)
set(getjframe,'WindowIconifiedCallback',{@winMinimizedCallback,mydata})
set(getjframe,'CloseOnEscapeEnabled','on')
jframes = getjframe([gcf,hButton]); % get 2 java frames, from 2 figures

Bugs and suggestions:
Please send to Yair Altman (altmany at gmail dot com)

Warning:
This code heavily relies on undocumented and unsupported Matlab functionality. It works on Matlab 7+, but use at your own risk!

Cite As

Yair Altman (2019). getjframe - Retrieves a figure's underlying Java frame (https://www.mathworks.com/matlabcentral/fileexchange/15830-getjframe-retrieves-a-figure-s-underlying-java-frame), MATLAB Central File Exchange. Retrieved .

Comments and Ratings (8)

Yair Altman

This utility only works with legacy (Java-based) figures, not with AppDesigner uifigures (which are not Java figures at all, but rather a browser window that displays an HTML web-page).

I can't make it work with the new MATLAB's app-designer UIFigure.

Any ideas?

using
javax.swing.SwingUtilities.getWindowAncestor(jFrame.getAxisComponent);

instead of
jFrame.fHG2Client

worked for me.

Great work. Thank you for keeping this up to date.

This is very useful. I am using it to control minimizing and maximizing the figure windows. I know the potential is much greater.

Vihang Patil

Great!!

Bob W

Nice utility.

Updates

1.6.0.0

Extra check for additional robustness

1.5.0.0

Additional fixes for R2014b onward (HG2)

1.2.0.0

Fix for R2014b (HG2)

1.1.0.0

Fix for R2011b

1.0.0.0

Added Matlab figure handle property; improved responsiveness handling; added support for array of handles; added sanity checks for illegal handles

wrong file was initially uploaded by mistake - now fixed

MATLAB Release Compatibility
Created with R2007a
Compatible with any release
Platform Compatibility
Windows macOS Linux