Dalla mia osservazione ho scoperto che il privilegio AlwaysOnTop è dato all'ultimo processo che richiedeva di essere sempre in primo piano.
Quindi, se si dispone di un'applicazione che setAlwaysOnTop(true)e successivamente un'altra applicazione utilizza questa opzione, il privilegio viene assegnato alla seconda applicazione. Per ovviare a questo problema, ho impostato setAlwaysOnTop(false)e di nuovo setAlwaysOnTop(true)ogni volta che una finestra viene visualizzata in cima alla finestra corrente.
L'ho controllato con wordwebdentro windows. WordWeb è una delle applicazioni che utilizza l' AlwaysOnTopopzione dalOS
Non sono sicuro che funzioni correttamente con il tuo scenario di gioco.
Avvertenza : non sono a conoscenza degli effetti collaterali.
Ecco l'esempio di codice:
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();}
}