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 wordweb
dentro windows
. WordWeb è una delle applicazioni che utilizza l' AlwaysOnTop
opzione 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();}
}