3 回答

TA貢獻1860條經驗 獲得超9個贊
試試這個Window類的方法:
Window.setAlwaysOnTop(boolean)
它的工作方式與Windows TaskManager中的默認工作方式相同:切換到另一個應用程序,但始終顯示在最前面。
這是在Java 1.5中添加的
樣例代碼:
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Annoying {
public static void main(String[] args) {
JFrame frame = new JFrame("Hello!!");
// Set's the window to be "always on top"
frame.setAlwaysOnTop( true );
frame.setLocationByPlatform( true );
frame.add( new JLabel(" Isn't this annoying?") );
frame.pack();
frame.setVisible( true );
}
}
即使未激活,窗口仍位于頂部

TA貢獻1873條經驗 獲得超9個贊
從我的觀察中,我發(fā)現(xiàn)AlwaysOnTop特權已授予要求始終位于最前面的最新進程。
因此,如果您有一個應用程序,setAlwaysOnTop(true)后來又有另一個應用程序使用此選項,則將特權授予第二個應用程序。為了解決此問題,我在任何窗口位于當前窗口頂部時都設置了setAlwaysOnTop(false)和setAlwaysOnTop(true)。
我已經檢查了它wordweb在windows。WordWeb是使用以下AlwaysOnTop選項的應用程序之一OS
我不確定它是否適合您的游戲場景。
警告:我不知道副作用。
這是代碼示例:
import java.awt.event.*;
import javax.swing.*;
public class MainWindow extends JFrame implements WindowFocusListener
{
public MainWindow()
{
addWindowFocusListener(this);
setAlwaysOnTop(true);
this.setFocusable(true);
// this.setFocusableWindowState(true);
panel = new JPanel();
//setSize(WIDTH,HEIGHT);
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){
//toFront();
//requestFocus();
setAlwaysOnTop(false);
setAlwaysOnTop(true);
//requestFocusInWindow();
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();}
}
添加回答
舉報