如何在其他弹出窗口中显示弹出窗口?

时间:2011-03-22 17:26:33

标签: java user-interface swing popup jdialog

在我的应用程序中,在某个屏幕上,我启动了一个弹出窗口。取决于用户将在此弹出窗口上单击的按钮,必须启动另一个弹出窗口。我使用JDialog对象来实现这些弹出窗口。问题是第二个弹出窗口没有显示(即使使用setVisible(true)和toFront())。它已经创建但我看不到它。我在其构造函数中定义了第一个弹出窗口作为其所有者。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

当从父窗口或对话框打开JDialog并设置为模态时,父窗口的事件调度线程将暂停。这可以防止父对象聚焦或传递其他事件,或者在模式对话框关闭之前基本上做任何事情。因此,呼叫阻止

你必须做的是从其他地方开始你的事件,比如新的对话框而不是父窗口,或者不使用模态对话框,使用常规JFrame并将其设置为始终在顶部使用setAlwaysOnTop(true)。这意味着用户可以继续使用父窗口,事件仍将从中触发。

附录:为了回答你的问题“程序专注于显示它并且不会对必须隐藏它的事件作出反应”:当你进行对话模式时,一旦你看到它,它就会阻止它父窗口,直到它关闭,包括事件触发。如果需要以编程方式关闭新弹出窗口,则需要将弹出窗口设置为非模态,或者需要在新弹出窗口的上下文中执行后续代码(例如在事件可见时触发事件)< / p>

答案 1 :(得分:1)

好的,现在我设法显示第二个弹出窗口。触发弹出窗口的事件中的代码是:

printingWindow.setLocationRelativeTo(null);
printingWindow.toFront();
printingWindow.setModal(true);
printingWindow.pack();
printingWindow.setVisible(true);

但现在我有一个不同的问题:

当printingWindow设置为可见时,程序会专注于显示它,并且不会对必须隐藏它的事件作出反应。

触发适当事件时执行的代码是:

printingWindow.setVisible(false);
printingWindow.dispose();

那么我如何关闭这个弹出窗口(通过触发事件)?