Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 防止JWindow出现在所有窗口的顶部_Java_Swing_Jdialog_Jwindow - Fatal编程技术网

Java 防止JWindow出现在所有窗口的顶部

Java 防止JWindow出现在所有窗口的顶部,java,swing,jdialog,jwindow,Java,Swing,Jdialog,Jwindow,我在我的项目中使用JWindow来显示一个未装饰的UI,并且也不显示在任务栏中。但是,JWindow似乎总是位于所有其他窗口之上。我试着将setAlwaysOnTop设置为false,但似乎没有帮助 下面是可以重现问题的代码: package test; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.

我在我的项目中使用JWindow来显示一个未装饰的UI,并且也不显示在任务栏中。但是,JWindow似乎总是位于所有其他窗口之上。我试着将setAlwaysOnTop设置为false,但似乎没有帮助

下面是可以重现问题的代码:

package test;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JWindow;

public class Test extends JWindow implements ActionListener {

    public Test() {
        setSize(300, 300);
        setLocationRelativeTo(null);
        setAlwaysOnTop(false);

        JButton myButton = new JButton("Click Here");
        myButton.addActionListener(this);
        getContentPane().add(myButton);

        setVisible(true);
    }

    public static void main(String[] args) {
        new Test();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getActionCommand().equals("Click Here"))
            JOptionPane.showMessageDialog(this, "This dialog box appears behind the JWindow!");
    }
}
我的操作系统是Linux,我使用的是Oracle JDK 6。另外,当我在Windows上测试我的应用程序时,我在UI上使用JDialog,它工作正常。但是,在Linux中,JDialog似乎出现在任务栏中


有关如何解决此问题的任何帮助?

将窗口的可见性设置为True后,将其发送到后面,如下所示:

setVisible(true);
toBack();
如果以后要将其置于堆叠顺序的顶部,只需调用:

toFront();
详情如下:


我认为这不是情态的问题。当JWindow位于顶部时,我可以访问其他窗口以及应用程序。但是,JWindow不会返回,它始终位于顶部。感谢您的回复,但当我打包时,它只会将其发送回应用程序中的堆叠顺序。JWindow仍然在运行的所有其他应用程序之上。哦,我现在明白了,这主要是操作系统的问题,因为JAVA虚拟机无法访问操作系统的可视化装饰器。也在文档中:您将看到以下注意事项:某些平台可能不支持始终在顶部的窗口。没有公共API来检测平台在运行时是否支持始终在顶部。另外,Linux中的任务栏是什么?你说你的操作系统是Linux,这是错误的,你的操作系统的内核是Linux,但操作系统是其他的东西Ubuntu,Fedora,OpenSuse,Debian等等。。。所有这些发行版都使用不同的可定制的装饰器,正如我所说的,JavaVM没有访问它们的权限。如果您想进一步研究这个问题,请找出您使用的操作系统和装饰器,并有可能了解更多有关它们的信息。虽然我看不出你需要这样的东西有什么好的理由,但我想你已经有了。另外,如果你解释一下为什么需要这个,我们可能会给你另一个选择。对不起,我是说Linux Mint。我的桌面环境也是Mate。基本上,我正在开发一个便笺应用程序,它使用系统托盘作为管理应用程序的主UI。我正在使用JDialog创建便笺。但是,在Linux中,我也尝试过其他桌面环境,它在任务栏中可见,这在本例中是不可取的。所以,现在我使用JWindow,但它只是停留在所有窗口的顶部。您可以在这里查看该项目:好的,问题不在于它位于其他窗口的顶部,而在于它在任务栏中的外观。看看这个代码,这是一个旧的家庭作业通知系统。它创建了一个带有通知的小窗口,该窗口在几秒钟后过期。据我记忆所及,此通知不会出现在任务栏中。代码可能有点混乱,但我希望它能有所帮助。它与将窗口的主要组件设置为JPanel而不是JFrame有关