我创建了Windows操作系统的Swing应用程序。 我的一个的JDialog(其窗口parentJFrame)的显示的JOptionPane。
JOptionPane.showMessageDialog(parentJFrame, "I am a JOption");
。
在运行时, parentJFrame setAlwaysOnTop(true)
。 尽管它已成立alwaysOnTop真时,JOptionPane的appeares上Windows操作系统的parentJFrame。 但是当我跑了它在Linux操作系统中,parentJFrame背后的JOptionPane显示。(可能是这个原因是parentJFrame alwyasOnTop是真的 ,但JRE的运行方式在不同势OS期不同方式相同的应用程序?)我怎样才能得到它的在Linux中parentJFrame的顶部? 这是迫切的,请..
当“alwaysOnTop真”组分显示的JOptionPane,出现的JOptionPane在Linux下部件后面.. :(但这处理好了在Windows操作系统。JOptionPane中被显示在其上设置“alwaysOnTop真”组件的顶部。它似乎有一个矛盾显示在Linux操作系统的桌面屏幕上的组件。我不敢肯定这样的,但我想它。
- Linux操作系统具有的Oracle JDK和JRE 7
在Linux上看到的行为是按照API规范。 这就是它说的Window.setAlwaysOnTop() :
如果存在多个始终位于顶层的窗口,它们的相对顺序是不确定的,并且依赖于平台。
并且:
通过始终位于顶层的窗口拥有的窗口将继承此状态,并自动成为永远在最上层。
这可以解释为什么这是在JOptionPane中的心脏的JDialog也有“总在最前面”的地位。 看来,在Windows上通过的机会,它可以作为你的预期,但真正你问的Swing做一些事情是不可能的:显示父“始终高于其他窗口”,也是展现在它上面的对话框。
这里有一个可能的解决方法:将旁边的家长对话,使正在接受它的z轴,用户将仍然可以看到它:
JDialog dialog = new JOptionPane("Message").createDialog(parent, "Title");
Point dialogLoc = dialog.getLocation();
Point parentLoc = parent.getLocation();
dialog.setLocation(parentLoc.x + parent.getWidth(), dialogLoc.y);
dialog.setVisible(true);
请注意,没有单一的“Linux操作系统”,尤其是当它涉及到窗口管理 - 有很多,在广泛不同的行为方式,当涉及到窗口排序和知名度不同的桌面环境和窗口管理器,经常故意。
这是非常简单的:要显示ddialog框的代码后写这行代码:
JOptionPane optionPane = new JOptionPane("Reports are Generated");
JDialog dialog = optionPane.createDialog("Success!");
dialog.setAlwaysOnTop(this.isAlwaysOnTopSupported());
dialog.setVisible(true);
不要在双引号改变什么exept字符串。