Java 防止JWindow出现在所有窗口的顶部
我在我的项目中使用JWindow来显示一个未装饰的UI,并且也不显示在任务栏中。但是,JWindow似乎总是位于所有其他窗口之上。我试着将setAlwaysOnTop设置为false,但似乎没有帮助 下面是可以重现问题的代码: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.
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有关