Swing中用于显示窗口的组件不外 3 个:JWindow 、JFrame 和 JDialog,它们分别扩展自 AWT 的对应组件。然而,只有 JDialog 可以是模态的,其它两个都无法实现模态。可是又只有 JWindow 可以没有标题栏,没有边框,就像 JToolTip 那样。
这就带来一个问题,如果我们需要一个显示进度的组件,比如用来显示数据在后台的加载情况,在没有完全获得数据之前,不允许用户碰界面。那么,这个组件很自然应该是模态的,而且在它上面不应该提供其它的按钮。这样最好用 JWindow 来实现:把 JProgressBar 加到它里面就可以,可是 JWindow 不是模态的,无法阻止用户在数据加载完成之前去碰界面。我曾想用 JDialog 来代替 JWindow 来实现,可是它有标题栏,把进度条放进去很难看。
要解决这个问题,现在有一个非常好的方法,就是用 JModalWindow 代替 JWindow。虽然 JModalWindow 提供有不指定 owner 的构建器,但要使模态窗口生效,必须在初始化的时候指定窗口的 owner。
除了 JModalWindow,它还提供了 JModalDialog、JModalFrame、JSplashWindow 等几个很有用的组件。
如果你在开发中也要用到模态窗口的话,JModalWindow会很有用的。
这就带来一个问题,如果我们需要一个显示进度的组件,比如用来显示数据在后台的加载情况,在没有完全获得数据之前,不允许用户碰界面。那么,这个组件很自然应该是模态的,而且在它上面不应该提供其它的按钮。这样最好用 JWindow 来实现:把 JProgressBar 加到它里面就可以,可是 JWindow 不是模态的,无法阻止用户在数据加载完成之前去碰界面。我曾想用 JDialog 来代替 JWindow 来实现,可是它有标题栏,把进度条放进去很难看。
要解决这个问题,现在有一个非常好的方法,就是用 JModalWindow 代替 JWindow。虽然 JModalWindow 提供有不指定 owner 的构建器,但要使模态窗口生效,必须在初始化的时候指定窗口的 owner。
除了 JModalWindow,它还提供了 JModalDialog、JModalFrame、JSplashWindow 等几个很有用的组件。
如果你在开发中也要用到模态窗口的话,JModalWindow会很有用的。