我创建了两个对话框:
DialogA:仅调用一次
DialogB:每1.5秒调用一次
在Windows系统中,每次调用
测试案例(Windows):
1. 我从IDE启动应用程序。
2. 我看到DialogA。
3. 我在IDE中单击,DialogA消失。
4. 一秒钟后,DialogA和DialogB将显示出来。
5. 我在IDE中单击,DialogA和DialogB消失。返回4。
预期行为(OSX):
4. 一秒钟后,DialogB将显示出来。
5. 我在IDE中单击,DialogB消失。返回4。
问题:
如何在Windows系统下实现预期行为?
DialogA:仅调用一次
setVisible(true)
。DialogB:每1.5秒调用一次
setVisible(true)
和setAlwaysOnTop(true)
。在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){}
}
}
}