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 wordweben windows. WordWeb es una de las aplicaciones que utiliza la AlwaysOnTopopció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();}
}