2012-06-20 10 views
9

La mia applicazione Java ha più frame. Alcuni di questi sono impostati per essere sempre al top. Tuttavia, quando l'utente apre un altro programma (diciamo un browser web), voglio che i frame sempre in primo piano si spostino sullo sfondo, lasciando che l'altra applicazione si mostri completamente sullo schermo.Come mantenere un frame sempre in primo piano all'interno dell'applicazione ma metterlo sullo sfondo quando si usano altre applicazioni in Java?

+2

mi piacerebbe vedere se qualcuno risponde a questa .... – Thihara

+0

* "La mia applicazione Java ha più frame." * Vedi [L'uso di più JFrames, Good/Bad Practice?] (Http://stackoverflow.com/a/9554657/418556) * "Alcuni di loro sono impostati per essere sempre attivi top. "* Usa una finestra di dialogo. Non proprio l'effetto che descrivi, ma il percorso di sorpresa minore per l'utente. –

+0

@AndrewThompson Questo non è necessariamente vero: dipende dall'applicazione. Sono d'accordo che non è la scelta migliore per un programmatore che salta in una nuova applicazione senza specifiche per tali cose.Ma non ci sono dubbi sui casi in cui questo tipo di comportamento sarebbe il design preferito. –

risposta

4

Crea il tuo Window Manager.

Creare un gestore finestre personalizzato che implementa WindowListener, WindowStateListener e WindowFocusListener. Registra tutti i nuovi fotogrammi con questo gestore e utilizzalo per riportare i fotogrammi sempre in primo piano quando l'utente interagisce con i fotogrammi.

Sembra che l'applicazione stia utilizzando un codice di gestione dei frame piuttosto personalizzato. La mia ipotesi è che man mano che si continua a sviluppare l'applicazione, questo gestore delle finestre assumerà più funzionalità per gestire l'interfaccia utente. Questo non solo ti darà il design per risolvere il tuo problema, ma anche una base per eventuali modifiche o miglioramenti a questo comportamento.

Tenere presente, tuttavia, che Java non può controllare il funzionamento del sistema operativo con altre applicazioni. Non può nemmeno portare in modo affidabile un frame in primo piano rispetto ad altre applicazioni in tutti i sistemi operativi. Dovrai lavorare con i sistemi operativi che sosterrai per scrivere questo Window Manager per darti il ​​comportamento che desideri.

+0

Come gestirà questa finestra non istanziata dall'interno della JVM corrente? – Dave

+0

Non può. Questo disegno fornirà le basi per il controllo di questo comportamento. Potrebbe benissimo essere una soluzione migliore per avere solo un frame simile a MDI e avere tutti i frame dell'applicazione aperti all'interno. Ciò darebbe un controllo assoluto su tali cose, ma non conosco i requisiti e posso solo andare fuori da ciò che l'OP ha posto nella domanda. –

1

La mia applicazione Java ha più frame. Alcuni di questi sono impostati per essere sempre al top.

non farlo, utilizzare CardLayout invece, nel caso in cui si ha realmente bisogno di azione end_user quindi di utilizzare

  • JOptionPane

  • modale JDialog (o ModalityType con AplicationModal)

  • re_use JDialog (getContentPane.remo veAll()) per il prossimo utilizzo di

Tuttavia, quando l'utente apre un altro programma (diciamo un browser web), voglio che le cornici sempre-on-top per spostarsi sullo sfondo, aprendo la strada per l'altra applicazione da mostrare completamente sullo schermo.

questo potrebbe essere molto fastidioso per end_user, utilizzare FullScreen invece

avviso più importante resto è nel commento di @Andrew Thompson