java - JDialog.setAlwaysOnTop(true) 在Windows下将所有对话框带到最前面

标签 java swing jdialog

我创建了两个对话框:
DialogA:setVisible(true) 只调用了一次。
DialogB:setVisible(true)setAlwaysOnTop(true) 每 1.5 秒调用一次

Windows:每次调用 dialogB.setAlwaysOnTop(true) 都会将 dialogA 和 dialogB 置于最前面。
OSX:每次调用 dialogB.setAlwaysOnTop(true) 只会将 dialogB 带到前面。 (预期行为)

测试用例(Windows):

1 我从我的 IDE 启动应用程序。
2 我看到了 DialogA。
3 我在 IDE 中单击,DialogA 消失了。
4 一秒钟后,DialogA 和 DialogB 将出现。
5 我在 IDE 中单击,DialogA 和 DialogB 消失。转到 4

预期行为(OSX):
4. 一秒钟后 DialogB 会出现。
5. 我在 IDE 中单击,DialogB 消失了。转到 4

问题:
如何在 Windows 下获得预期的行为?

import javax.swing.JDialog;
import javax.swing.JLabel;
public class JDialogSetAlwaysonTopTEST
{
public static void main(String[] p_Strings)
{
    final JDialog dialogA = new JDialog();
    dialogA.setLocation(0, 0);
    dialogA.add(new JLabel("DialogA: Click on the overlapped   window"));       
    java.awt.EventQueue.invokeLater(new Runnable() {           
        public void run() {
            dialogA.pack();
            dialogA.setVisible(true);
        }
    });

    try {Thread.sleep(3000);} catch (InterruptedException e){}

    final JDialog dialogB = new JDialog();
    dialogB.setLocation(70, 70);
    dialogB.add(new JLabel("DialogB:  Do you see DialogA?"));

    java.awt.EventQueue.invokeLater(new Runnable() {           
        public void run() {
            dialogB.pack();
            dialogB.setVisible(true);
        }
    });

    while(true)
    {
        java.awt.EventQueue.invokeLater(new Runnable()  {                  
            public void run() {
                dialogB.setAlwaysOnTop(true);  //prerequisite
                dialogB.setVisible(true);
                dialogB.setAlwaysOnTop(false); //prerequisite
            }
        });         
        try {Thread.sleep(1500);} catch (InterruptedException e){}
    }       
}
}

最佳答案

我找到了解决我的问题的“脏”解决方案。

final JDialog dialogA = new JDialog(new JFrame());
...
final JDialog dialogB = new JDialog(new JFrame());

如果每个对话框都有一个独立的所有者dialogB.setAlwaysOnTop(true),dialogB.setVisible(true)不影响dialogA

关于java - JDialog.setAlwaysOnTop(true) 在Windows下将所有对话框带到最前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8928562/

相关文章:

java - 异常: adding a window to a container.如何解决?

java - 执行键盘操作时遇到问题

java - 如何在 ActionListener 中关闭按钮后打开按钮

java - 如何将一个窗口附加到另一个窗口

java - 检查字符串是否仅包含字母 - 电子邮件验证

java - 为什么 DocumentFilter 没有给出预期的结果?

java - 将 JDialog 调用到自定义 JInternalFrame 中

java - 如何处理 Java Applet 中的多个按键?

Java 和 Clojure 与 Leiningen

java - Full GC变得非常频繁