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.
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.
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.
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.
JInternalFrames
are created an InternalFrameListener
is attached to each that keeps track of which frame is active and which is not. I've updated my answer a bit in case the poster doesn't care for events - JDesktopPane
has the method getSelectedFrame
. –
Flung java.swing.Action
s that back menu items and toolbar buttons. The Action
(and thus the items and buttons) should only be enabled when certain frames are on top. Would you rather run a timer asking the JDesktopPane
who's on top or just listen for events? Reinventing the wheel would be iterating over all the frames looking for isSelected
when getSelectedFrame
has been around since Java 1.3. –
Flung InternalFrameListener
, which seems like a good use of the API. Edit: Sorry if I adversely influenced your appraisal. –
Malinowski © 2022 - 2024 — McMap. All rights reserved.