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 wordweb
dans windows
. WordWeb est l'une des applications qui utilise l' AlwaysOnTop
option 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();}
}