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

È stato utile?

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 ..

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top