Dariusz G. Jagielski
Dariusz G. Jagielski

Reputation: 665

JDesktopPane - how to get active frame

How to get active (having focus) frame (JInternalFrame) that is inside JDesktopPane? I need it for my MDI notepad (not that anybody would use that, just a training project). Looking at api, I see only functions to get all JInternalFrames, not active one.

Upvotes: 9

Views: 9348

Answers (3)

trashgod
trashgod

Reputation: 205785

Make a List<JInternalFrame> and check isSelected() as you iterate though it.

Addendum: See also these examples that use Action to select an internal frame from a menu.

Upvotes: 3

Paul
Paul

Reputation: 20061

Have you looked at the Java tutorial titled How to Use Internal Frames? In your code you need an InternalFrameListener (API) (Tutorial) and listen to activate/deactivate events. Activated means the internal frame was brought to the top; deactivated means it's no longer on top. Since JDesktopPane extends JLayeredPane you can also set the z-order of components added to it.

Don't iterate over all the panes - use events.

If for some reason you prefer to poll your UI rather than use an event-driven approach you can call getSelectedFrame which returns the active JInternalFrame. I'm not sure why no one else mentioned it.

Upvotes: 2

KV Prajapati
KV Prajapati

Reputation: 94645

Use JDekstopPane.getSelectedFrame() method (From doc: currently active JInternalFrame in this JDesktopPane, or null if no JInternalFrame is currently active.) or JDesktopPane.getAllFrames() to get list of all JInternalFrames currently displayed in the desktop and check isSelected() method.

Upvotes: 12

Related Questions