2011-03-22 207 views
1

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

+0

我以前经常从另一个弹出窗口显示弹出窗口。我没有这样的问题..但是如果你不发表一些代码就很难回应。 – Heisenbug 2011-03-22 17:40:01

回答

1

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

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

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

当printingWindow被设置为可见,该方案集中在显示它并没有反应到必须隐藏它的事件。

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

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

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

+0

我更新了我的答案以回应你的新问题! – BoffinbraiN 2012-01-23 09:55:20

2

当从父窗口或对话框打开JDialog并设置为模态时,父窗口的事件派发线程将暂停。这可以防止父母关注或传递其他事件,或者基本上做任何事情,直到模式对话框关闭。因此呼叫阻止

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

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

+0

我试图在JFrame构造函数中调用打印过程。该进程被执行并显示窗口,但它永远不会被关闭。我也尝试在新线程(从父JFrame)中执行打印过程,但没有成功。也许你对我有很好的教程?我认为用加载屏幕编写应用程序非常流行,我不能成为唯一一个:) – tomericco 2011-03-25 11:43:19

+0

@tomericco如果您想在加载应用程序时使用启动画面,请阅读[本教程关于Java SplashScreens](http: //download.oracle.com/javase/tutorial/uiswing/misc/splashscreen.html)。如果这不是你所需要的,那么你*需要在你的问题中提供更多信息,并且可能需要提供一些示例代码。 – BoffinbraiN 2011-03-25 14:10:01

+0

我做了一些更改,但大多将弹出窗口更改为JFrame并且工作正常。你说得对。 – tomericco 2011-03-25 16:00:43