带有Java的“ Always on Top” Windows

在Java中,是否有一种方法可以使窗口始终位于“始终位于顶部”,而不管用户是否将焦点切换到另一个应用程序?我已经在网上搜索了,所有解决方案都依赖于具有本机绑定的某种JNI接口。确实,这不是唯一的方法吗?..还是?



慕标琳琳
浏览 404回答 3
3回答

慕码人2483693

试试这个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 );    }}即使未激活,窗口仍位于顶部

眼眸繁星

从我的观察中,我发现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();}    }

繁花不似锦

不要使用setFullScreenWindow,只获取屏幕尺寸,然后获取setSize,一切都会好起来的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java