2009-03-13 17 views
6

Sto scrivendo una piccola partita, con una JFrame che contiene il gioco principale e un'altra JFrame che mostra il punteggio. il problema è che, quando ho finito di costruirli, il punteggio JFrame finisce sempre per concentrarsi! Ho provato a chiamare scoreDisplay.toFront(), scoreDisplay.requestFocus(), e anche:Come mettere a fuoco un JFrame?

display.setState(JFrame.ICONIZED); 
display.setState(JFrame.NORMAL); 

C'è un modo per fare questo lavoro? Grazie in anticipo, John murano

+0

Per i futuri visitatori che desiderano mettere a fuoco un JFrame, vedere la mia risposta nella pagina che utilizza 'frame.requestFocus()'. La risposta accettata risolve il problema dell'OP, ma la soluzione è molto specifica della sua situazione. –

risposta

2

Avere si considera fissando il punteggio nello stesso frame come il frame del gioco?

Un'altra opzione possibile (rapida e sporca) è quella di crearli in ordine inverso, o almeno (se il punteggio dipende dal gioco) visualizzarli in ordine inverso.

score.setVisible(true); 
game.setVisible(true); 

La mia ipotesi è che attualmente essi sono:

game.setVisible(true); 
score.setVisible(true); 
+0

Grazie. Questa soluzione funziona perfettamente! –

+2

Mentre questa soluzione risolve il problema dell'OP, non risponde alla domanda del titolo. –

6

Toggle alwaysOnTop

Vedi qui:

http://forums.sun.com/thread.jspa?threadID=5124278

Leggi su toFront nell'API 012.351.http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Window.html#toFront

Alcune piattaforme non possono consentire questo VM di inserire il suo Windows sopra le finestre di applicazioni native di Windows, o di altre macchine virtuali.

Sul sistema operativo Windows per esempio toFront fa sì che l'icona sulla barra delle applicazioni per sfarfallio, ma la finestra rimane nel posteriore.

L'unico pensiero che costringerà la finestra in primo piano è setAlwaysOnTop.

frame.setAlwaysOnTop(true); 
frame.setAlwaysOnTop(false); 
+0

Grazie. Questo ha funzionato per me, con l'avvertimento che ho dovuto chiamarli (immediatamente) dopo frame.setVisible (true). Immagino che abbia senso, ma li stavo facendo separatamente. – ensignr

-2
frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 
frame.setVisible(true); 

Prova quanto sopra ..

6

chiamate il metodo requestFocus().

Questo non è garantito per funzionare, perché ci sono molte ragioni per cui un sistema operativo non consentirebbe una messa a fuoco di un frame. Potrebbe esserci un altro frame con priorità più alta in un'applicazione diversa. Ci sono anche alcuni desktop Linux che (se ricordo male) non permettono ai frame di richiedere lo stato attivo.

Per offrirti una migliore possibilità di successo, ti consiglio anche di chiamare il metodo toFront() prima di richiedere l'attivazione.

frame.setVisible(true); 
frame.toFront(); 
frame.requestFocus(); 

Si prega di tenere a mente, niente di tutto questo è garantito perché la manipolazione fotogramma, in particolare con la messa a fuoco e stratificazione, è molto dipendente dal sistema operativo. Quindi imposta la cornice su visibile, spostala in avanti e richiedi la messa a fuoco. Una volta abbandonato l'EDT, il sistema operativo probabilmente darà al frame il focus. Per lo meno, la finestra dovrebbe essere in cima.

0

Basta aggiungere la seguente riga di codice sopra il codice JOptionPaneMessageDialog ... this.setAlwaysOnTop (false);

Problemi correlati