De mi observación, descubrí que el privilegio AlwaysOnTop se otorga al último proceso que solicitó estar siempre en la parte superior.
Entonces, si tiene una aplicación que setAlwaysOnTop(true)
y luego otra aplicación usa esta opción, el privilegio se otorga a la segunda aplicación. Para solucionar este problema, configuré setAlwaysOnTop(false)
y de nuevo setAlwaysOnTop(true)
cada vez que aparezca una ventana en la parte superior de la ventana actual.
He comprobado con wordweb
en windows
. WordWeb es una de las aplicaciones que utiliza la AlwaysOnTop
opción delOS
No estoy seguro de si funciona correctamente con tu escenario de juego.
Advertencia : no estoy al tanto de los efectos secundarios.
Aquí está el ejemplo de código:
import java.awt.event.*;
import javax.swing.*;
public class MainWindow extends JFrame implements WindowFocusListener
{
public MainWindow()
{
addWindowFocusListener(this);
setAlwaysOnTop(true);
this.setFocusable(true);
panel = new JPanel();
setUndecorated(true);
setLocation(X,Y);
setExtendedState(MAXIMIZED_BOTH);
setVisible(true);
}
public void windowGainedFocus(WindowEvent e){}
public void windowLostFocus(WindowEvent e)
{
if(e.getNewState()!=e.WINDOW_CLOSED){
setAlwaysOnTop(false);
setAlwaysOnTop(true);
System.out.println("focus lost");
}
}
private JPanel panel;
private static final int WIDTH = 200;
private static final int HEIGHT = 200;
private static final int X = 100;
private static final int Y = 100;
public static void main(String args[]){
new MainWindow();}
}