我正在编写一个Swing应用程序,该应用程序需要充当浏览器中的applet或独立应用程序,即它可以包含在JFrame或JApplet中。
在这种情况下,我想向用户显示一个自定义模式对话框(即,一个具有自定义布局和逻辑的复杂对话框,而不仅仅是简单的JOptionPane提示之一)。如果对话框是完全包含在应用程序窗口中的轻量级组件,那就很好。
同时,应用程序中将发生后台处理(网络线程,动画等)。在显示对话框时,这需要继续。
实施此方法的最佳方法是什么?
看一看JDialog。如果将其设置为模式,它将运行自己的事件处理以使GUI保持最新状态,同时捕获鼠标和键盘事件以供自己使用。
JDialog
我已经看过了它使用的代码,而这实际上并不是您想要尝试重新发明的东西。
如果以非模式运行它,则可能需要添加一个在最终关闭时被调用的侦听器。这是通过addWindowListener和重写的WindowAdapter 完成的windowClosing。
addWindowListener
windowClosing
至于owner构造函数的参数,我用
owner
Window w = (Window) SwingUtilities.getAncestorOfClass(Window.class, comp);
其中comp是一些可见的组件。
之所以起作用,是因为始终有一个顶级窗口,无论是作为applet还是作为应用程序运行。