2011-12-17 12 views
8

Come ottenere il frame attivo (con focus) (JInternalFrame) all'interno di JDesktopPane? Ne ho bisogno per il mio blocco note MDI (non che qualcuno lo userebbe, solo un progetto di formazione). Guardando api, vedo solo le funzioni per ottenere tutto JInternalFrames, non attivo.JDesktopPane - come ottenere il frame attivo

risposta

10

Usa JDekstopPane.getSelectedFrame() metodo (Da doc. Attualmente JInternalFrame attivo in questo JDesktopPane, o null se non JInternalFrame è attualmente attivo) o JDesktopPane.getAllFrames() ottenere l'elenco di tutti i JInternalFrames attualmente visualizzato sul desktop e controllare isSelected() metodo.

+1

Grazie. Mi hai davvero aiutato. Ho cercato qualcosa come getActiveFrame o getFocusedFram e ho trascurato getSelectedFrame;) –

+1

+1 per usare l'API. – camickr

2

Creare un valore List<JInternalFrame> e controllare isSelected() mentre lo si itera.

Addendum: vedere anche questo example che utilizza Action per selezionare una cornice interna da un menu.

+3

Nota che [JDesktopPane.getAllFrames()] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JDesktopPane.html#getAllFrames()) restituisce un array, quindi potresti e basta semplicemente iterare la matrice (invece di usare una lista). –

+1

-1 per reinventare la ruota. Verrebbero utilizzati getSelectedFrame() o getAllFrames(). – camickr

+0

È un poliziotto imparziale. – trashgod

2

Hai esaminato il tutorial Java intitolato How to Use Internal Frames? Nel tuo codice hai bisogno di un InternalFrameListener (API) (Tutorial) e ascolta per attivare/disattivare gli eventi. Attivato significa che la cornice interna è stata portata in alto; disattivato significa che non è più in alto. Poiché JDesktopPane estende JLayeredPane, è possibile anche impostare l'ordine z dei componenti aggiunti.

Non scorrere su tutti i riquadri: utilizzare gli eventi.

Se per qualche motivo si preferisce eseguire il polling dell'interfaccia utente anziché utilizzare un approccio event-driven, è possibile chiamare getSelectedFrame che restituisce lo JInternalFrame attivo. Non sono sicuro del motivo per cui nessun altro l'ha menzionato.

+0

+1 per accoppiamento lento. Puoi elaborare? – trashgod

+0

@trashgod è piuttosto semplice, poiché 'JInternalFrames' sono creati con' InternalFrameListener' è collegato a ciascuno che tiene traccia di quale frame è attivo e quale no. Ho aggiornato la mia risposta un po 'nel caso in cui il poster non si preoccupi degli eventi - 'JDesktopPane' ha il metodo' getSelectedFrame'. – Paul

+0

> Nel tuo codice hai bisogno di un InternalFrameListener (API) (Tutorial) e ascolta per attivare/disattivare gli eventi. > Attivato significa che la cornice interna è stata portata in alto; disattivato significa che non è più in alto. > Poiché JDesktopPane estende JLayeredPane, puoi anche impostare l'ordine z dei componenti aggiunti. " In altre parole un altro suggerimento su" Come rendere il tuo codice più confuso e meno diretto. "Grazie, anche se terrò il mio codice è così semplice che, anche se non hai mai usato Java, lo capiresti: –

Problemi correlati