Pregunta

Estoy escribiendo un juego pequeño, con un JFrame que contiene el juego principal y otro JFrame que muestra el puntaje. El problema es que, cuando termino de construirlos, ¡el puntaje JFrame siempre termina enfocado! He intentado llamar a scoreDisplay.toFront (), scoreDisplay.requestFocus () e incluso:

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

¿Hay alguna forma de hacer que esto funcione? Gracias por adelantado, john murano

¿Fue útil?

Solución

¿Has considerado establecer la puntuación en el mismo marco que el marco del juego?

Otra opción posible (rápida y sucia) es crearlos en orden inverso, o al menos (si la puntuación depende del juego) mostrarlos en orden inverso.

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

Supongo que actualmente son:

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

Otros consejos

Alternar alwaysOnTop

Ver aquí:

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

  

Lea sobre toFront en la API    http://java.sun.com /j2se/1.5.0/docs/api/java/awt/Window.html#toFront

     

Algunas plataformas pueden no permitir esta VM   colocar sus ventanas sobre ventanas de   aplicaciones nativas o Windows de   otras máquinas virtuales.

     

En el sistema operativo Windows, por ejemplo toFront   hace que el icono en la barra de tareas   parpadeo, pero la ventana permanece en el   atrás.

     

El único pensamiento que obligará al   la ventana al frente está configuradaSiempreOnTop.

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

Llame al método requestFocus () .

No se garantiza que funcione, porque hay muchas razones por las cuales un sistema operativo no permitiría que un marco tenga foco. Podría haber otro marco con mayor prioridad en una aplicación diferente. También hay algunos escritorios de Linux que (si no recuerdo mal) no permiten que los marcos soliciten foco.

Para darle una mejor oportunidad de éxito, también recomiendo llamar al método toFront () antes de solicitar el enfoque.

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

Tenga en cuenta que nada de esto está garantizado porque el manejo del marco, especialmente con el enfoque y las capas, depende mucho del sistema operativo. Por lo tanto, configure el marco como visible, muévalo al frente y solicite el foco. Una vez que abandone el EDT, el sistema operativo probablemente le dará el foco al marco. Como mínimo, la ventana debe estar en la parte superior.

La forma en que lo haría es:

 frame.toFront();
 frame.setState(Frame.NORMAL); 

y si también desea tener más control sobre él, debe usar requestFocuse.

Por cierto, aquí hay un ejemplo: http: //coding.derkeiler. com / Archive / Java / comp.lang.java.gui / 2006-06 / msg00152.html

Simplemente agregue la siguiente línea de código sobre el código JOptionPaneMessageDialog ... this.setAlwaysOnTop (false);

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

Pruebe lo anterior ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top