Từ quan sát của tôi, tôi thấy rằng đặc quyền AlwaysOnTop được trao cho quy trình mới nhất được yêu cầu luôn ở trên cùng.
Vì vậy, nếu bạn có một ứng dụng setAlwaysOnTop(true)
và sau đó là một ứng dụng khác sử dụng tùy chọn này, thì đặc quyền sẽ được trao cho ứng dụng thứ hai. Để giải quyết vấn đề này, tôi đã đặt setAlwaysOnTop(false)
và đặt lại setAlwaysOnTop(true)
bất cứ khi nào bất kỳ cửa sổ nào ở trên cửa sổ hiện tại.
Tôi đã kiểm tra nó với wordweb
trong windows
. WordWeb là một trong những ứng dụng sử dụng AlwaysOnTop
tùy chọn từOS
Tôi không chắc liệu nó có hoạt động đúng với kịch bản trò chơi của bạn hay không.
Cảnh báo : Tôi không biết về các tác dụng phụ.
Đây là ví dụ mã:
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();}
}