&引用;“永远在最上面”;Windows与Java

&引用;“永远在最上面”;Windows与Java,java,user-interface,swing,awt,Java,User Interface,Swing,Awt,在Java中,是否有一种方法可以使窗口“始终位于顶部”,而不管用户是否将焦点切换到另一个应用程序?我搜索过web,所有的解决方案都倾向于某种带有本机绑定的JNI接口。真的,这不是唯一的办法吗?。。或者是吗?尝试窗口的这种方法类: 它的工作方式与Windows TaskManager中的默认设置相同:切换到其他应用程序,但它始终显示在顶部 这是在Java1.5中添加的 示例代码: import javax.swing.JFrame; import javax.swing.JLabel; pub

在Java中,是否有一种方法可以使窗口“始终位于顶部”,而不管用户是否将焦点切换到另一个应用程序?我搜索过web,所有的解决方案都倾向于某种带有本机绑定的JNI接口。真的,这不是唯一的办法吗?。。或者是吗?

尝试
窗口的这种方法
类:

它的工作方式与Windows TaskManager中的默认设置相同:切换到其他应用程序,但它始终显示在顶部

这是在Java1.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 );
    }
}


即使窗口未处于活动状态,窗口仍保持在顶部

根据我的观察,我发现总是向请求始终处于顶部的最新进程授予“始终处于顶部”权限

因此,如果您有一个应用程序
setAlwaysOnTop(true)
,然后另一个应用程序使用此选项,则该权限将授予第二个应用程序。为了解决这个问题,我设置了
setAlwaysOnTop(false)
,每当任何窗口位于当前窗口的顶部时,我都会再次设置
setAlwaysOnTop(true)

我已经用
windows
中的
wordweb
检查过了。WordWeb是使用
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,只需获取屏幕大小,然后设置大小,一切都会好起来。

您可能会认为在屏幕上搜索“java应用程序始终位于顶部”会得到这个答案,但它找不到。谢谢,你猜怎么着。现在是了!!:)它把你带到这里来!这是简单和可怕的。我也在寻找类似的东西,但不知道他们在Java1.5中实现了这一点。谢谢你的发帖。不幸的是,在运行全屏应用程序(如视频游戏)时,这对我不起作用。有人知道在这种情况下如何将其强制到顶部吗?@Dream lane我可能会问这样一个新问题:当另一个窗口出现在顶部时,再次将其设置为false和true听起来不是一个可行的解决方案,原因很简单——如果其他应用程序也做同样的事情怎么办?@Trejkaz,这是一个正确的观点。我现在不再接触swing了。这对我的用例非常有效!首先将其设置为false是关键。这是回答还是评论?@FailedScientist是一个赞美的评论