D'après mon observation, j'ai trouvé que le privilège AlwaysOnTop est accordé au dernier processus qui a demandé d'être toujours au top.
Donc, si vous avez une application qui setAlwaysOnTop(true)et plus tard une autre application utilise cette option, le privilège est donné à la deuxième application. Afin de contourner ce problème, j'ai défini le setAlwaysOnTop(false)et à setAlwaysOnTop(true)chaque fois qu'une fenêtre apparaît au-dessus de la fenêtre actuelle.
Je l' ai vérifié avec wordwebdans windows. WordWeb est l'une des applications qui utilise l' AlwaysOnTopoption duOS
Je ne sais pas si cela fonctionne correctement avec votre scénario de jeu.
Attention : je ne connais pas les effets secondaires.
Voici l'exemple de code:
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();}
}