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