Come focalizzare un JFrame?
-
22-07-2019 - |
Domanda
Sto scrivendo un gioco piccolo, con un JFrame che contiene il gioco principale e un altro JFrame che mostra il punteggio. il problema è che quando ho finito di costruirli, il punteggio JFrame finisce sempre concentrato! Ho provato a chiamare scoreDisplay.toFront (), scoreDisplay.requestFocus () e persino:
display.setState(JFrame.ICONIZED);
display.setState(JFrame.NORMAL);
C'è un modo per farlo funzionare? Grazie in anticipo, Giovanni Murano
Soluzione
Hai considerato di impostare il punteggio nello stesso frame del frame di gioco?
Un'altra possibile opzione (veloce e sporca) è 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 siano:
game.setVisible( true );
score.setVisible( true );
Altri suggerimenti
Attiva alwaysOnTop
Vedi qui:
http://forums.sun.com/thread.jspa?threadID=5124278
Leggi toFront nell'API http://java.sun.com /j2se/1.5.0/docs/api/java/awt/Window.html#toFront
Alcune piattaforme potrebbero non consentire questa macchina virtuale per posizionare le sue finestre sopra le finestre di applicazioni native o Windows di altre macchine virtuali.
Sul sistema operativo Windows, ad esempio Front causa l'icona sulla barra delle applicazioni sfarfallio, ma la finestra rimane in indietro.
L'unico pensiero che forzerà il la finestra in primo piano è setAlwaysOnTop.
frame.setAlwaysOnTop(true);
frame.setAlwaysOnTop(false);
Chiama il metodo requestFocus ()
.
Questo non è garantito per funzionare, perché ci sono molte ragioni per cui un sistema operativo non consentirebbe a un frame di avere il focus. Potrebbe esserci un altro frame con priorità più alta in un'applicazione diversa. Ci sono anche alcuni desktop linux che (se ricordo bene) non consentono ai frame di richiedere lo stato attivo.
Per offrirti maggiori possibilità di successo, ti consiglio anche di chiamare il metodo toFront ()
prima di richiedere il focus.
frame.setVisible(true);
frame.toFront();
frame.requestFocus();
Tieni presente che nulla di tutto ciò è garantito perché la gestione dei fotogrammi, specialmente con messa a fuoco e stratificazione, dipende molto 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 metterà a fuoco il frame. Per lo meno, la finestra dovrebbe essere in alto.
Il modo in cui vorrei fare è:
frame.toFront();
frame.setState(Frame.NORMAL);
e se vuoi avere anche un maggiore controllo su di esso, dovresti usare requestFocuse.
A proposito, ecco un esempio: http: //coding.derkeiler. com / Archivio / Java / comp.lang.java.gui / 2006-06 / msg00152.html
Basta aggiungere la seguente riga di codice sopra il codice JOptionPaneMessageDialog ... this.setAlwaysOnTop (false);
frame.setExtendedState( JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);
Prova quanto sopra ..