1

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

4

2 回答 2

2

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

相反,您必须做的是从其他地方触发您的事件,例如新对话框而不是父窗口,或者使用常规对话框而不是使用模式对话框,JFrame并使用setAlwaysOnTop(true). 这意味着用户可以继续使用父窗口,并且仍然会从中触发事件。

附录:针对您的问题“程序专注于显示它并且不对必须隐藏它的事件做出反应”:当您制作对话框模式时,一旦您使其可见,它将阻止父窗口直到它关闭,包括事件触发。如果您需要以编程方式关闭新弹出窗口,则需要使弹出窗口非模态,或者您需要在新弹出窗口的上下文中执行后续代码(例如在可见时触发事件)

于 2011-03-23T16:17:49.943 回答
1

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

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

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

当printingWindow 设置为可见时,程序集中于显示它而不响应必须隐藏它的事件。

触发相应事件时执行的代码是:

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

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

于 2011-03-22T21:39:33.417 回答