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