2011-12-17 10 views
8

¿Cómo activar el marco activo (que tiene foco) (JInternalFrame) que está dentro de JDesktopPane? Lo necesito para mi bloc de notas MDI (no es que alguien lo use, solo un proyecto de capacitación). Al mirar api, solo veo funciones para obtener todos los JInternalFrames, no uno activo.JDesktopPane: cómo obtener el marco activo

Respuesta

10

Uso JDekstopPane.getSelectedFrame() método (de Doc:. Actualmente JInternalFrame activo en este JDesktopPane, o null si no hay JInternalFrame está actualmente activo) o JDesktopPane.getAllFrames() obtener la lista de todos los JInternalFrames que aparece en el escritorio y comprobar isSelected() método.

+1

Gracias. Realmente me ayudaste Busqué algo como getActiveFrame o getFocusedFram y se pasó por alto getSelectedFrame;) –

+1

+1 para usar la API. – camickr

2

Haga un List<JInternalFrame> y marque isSelected() mientras lo itera.

Adición: Vea también este example que usa Action para seleccionar un marco interno de un menú.

+3

Tenga en cuenta que [JDesktopPane.getAllFrames()] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JDesktopPane.html#getAllFrames()) devuelve una matriz, por lo que podría también itera la matriz (en lugar de usar una lista). –

+1

-1 para reinventar la rueda. Se usarán getSelectedFrame() o getAllFrames(). – camickr

+0

Es un policía rubio. – trashgod

2

¿Has mirado el tutorial de Java titulado How to Use Internal Frames? En su código, necesita un InternalFrameListener (API) (Tutorial) y escuchar para activar/desactivar eventos. Activado significa que el marco interno fue llevado a la parte superior; desactivado significa que ya no está en la parte superior. Como JDesktopPane se extiende JLayeredPane, también puede establecer el orden z de los componentes que se le agregan.

No itere sobre todos los paneles - use eventos.

Si por alguna razón prefiere sondear su UI en lugar de utilizar un enfoque basado en eventos, puede llamar al getSelectedFrame, que devuelve el JInternalFrame activo. No estoy seguro de por qué nadie más lo mencionó.

+0

+1 para acoplamiento flojo. ¿Puedes elaborar? – trashgod

+0

@trashgod es bastante sencillo, ya que se crean 'JInternalFrames' y se adjunta' InternalFrameListener' a cada uno que realiza un seguimiento de qué marco está activo y cuál no. He actualizado mi respuesta un poco en caso de que al afiche no le interesen los eventos: 'JDesktopPane' tiene el método' getSelectedFrame'. – Paul

+0

> En su código necesita un InternalFrameListener (API) (Tutorial) y escuchar para activar/desactivar eventos. > Activado significa que el marco interno fue llevado a la parte superior; desactivado significa que ya no está en la parte superior. > Como JDesktopPane amplía JLayeredPane, también puede establecer el orden z de los componentes que se le agregan. " En otras palabras, otro consejo sobre" Cómo hacer que su código sea más confuso y menos directo ". mi código es tan simple que incluso si nunca usaste Java lo entenderías. –

Cuestiones relacionadas