gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:43:25 24 4
gpt4 key购买 nike

我创建了两个对话框:
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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com