jwindow始终处于顶部



我使用了java和swing。

我有两个Windows MainWindowPointWindow

MainWindow是一个jframe窗口。

PointWindow扩展了JWindow

我想将PointWindow始终保持在顶部(从来没有在其他窗口或组件下)。我在 PointWindow a setAlwaysOnTop(true)的构造函数中设置,但问题是当我单击到 MainWindow(focus)(焦点)时,下一个以不同的方式点击我的桌面(空空间),然后尝试拖动 PointWindow,然后它在我的 MainWindow下。

有什么方法可以将PointWindow始终放在所有组件之上?

编辑

在构造函数中,我尝试使用 WindowListener如下

this.addWindowListener(new WindowAdapter() {
    @Override
    public void windowDeactivated(WindowEvent e) {
        toFront();
    }
    @Override
    public void windowLostFocus(WindowEvent e) {
        toFront();
    }
});

...但是它不起作用,事件没有被捕获

如果两个窗口都属于同一应用程序,

setAlwaysOnTop(true);

方法应该做,您想要的。

如果您的窗口必须保持在顶部,即使您的应用程序丢失了焦点,您也必须定期将其推回顶部。如果另一个窗口得到焦点,则无法控制它,但是您可以使用线程将窗口推回顶部。

在下面的示例中,fr是您的窗口

Thread th = new Thread(){
        public void run(){
            boolean live = true;
            while(live){
                try{
                    fr.toFront();
                    fr.setAlwaysOnTop(true);
                }catch(Exception e1){
                    e1.printStackTrace();
                }
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
        }
}

此代码将使您的窗口每100毫秒向前推回最前面,对于大多数应用程序来说,这应该是一个变态。这不是最好的解决方案,但应该起作用

编辑:

如果您只想到窗口在另一个窗口的前面(焦点重新恢复后的事件),则可以添加和

当聚焦(focusevent e)fired fire时,您的jframe焦点列表并在窗口上调用tofront。

您可以用框架创建jwindow作为父:新Jwindow(jframeparent);这样,您的jwindow将收到所有事件。

仅使用未装饰的Jframe而不是Jwindow

edit2:

如果您只希望窗口在顶部,则单击它,Mouselistener是正确的方法。

解决方案

我将MouseAdapter作为MouseListener添加到PointWindow,当检测到mousePressed事件时,然后进行toFront()并工作正常,但有一个副作用,这意味着有一个时刻的时刻,窗口是隐藏和显示的(非常快)。<<<<<<<<<<<<<<<<<<<<<<<<<<<<<</p>

相关内容

  • 没有找到相关文章

最新更新