java – JDialog.setAlwaysOnTop(true)将所有对话框带到Windows
发布时间:2020-12-15 02:30:56 所属栏目:Java 来源:网络整理
导读:我创建了两个对话框: DialogA:setVisible(true)只调用一次. DialogB:setVisible(true)和setAlwaysOnTop(true)每1.5秒调用一次 Windows:每次调用dialogB.setAlwaysOnTop(true)都会将dialogA和dialogB带到前面. OSX:每次调用dialogB.setAlwaysOnTop(true)
我创建了两个对话框:
DialogA:setVisible(true)只调用一次. DialogB:setVisible(true)和setAlwaysOnTop(true)每1.5秒调用一次 Windows:每次调用dialogB.setAlwaysOnTop(true)都会将dialogA和dialogB带到前面. 测试用例(Windows): 1我从IDE启动应用程序. 预期行为(OSX): 题: 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |