JavaSwing:如何禁止JFrame/JDialog之外的交互?
我想在执行线程时显示progressbar并阻止与我的应用程序框架的交互
在另一个线程中,有人建议使用JDialog而不是JFrame和setModal(true)
。但是,执行此操作时,对话框会阻止整个应用程序
这基本上是我的代码:
MyDialog dlg = new MyDialog();
dlg.setModal(true);
dlg.setVisible(true);
//do some stuff....
//(never executed when setModal(true)
dlg.setVisible(false);
# 1 楼答案
使用modal dialog,尝试以下操作:
我还可以在JFrame上设置GlassPane,它将拦截用户的任何事件
# 2 楼答案
这就是模态对话框的要点,在“框”之外不会发生任何交互。模式弹出窗口也会在等待用户输入时停止线程。如果你想在显示对话框时做其他事情,你要么在对话框中做,要么启动一个新线程来处理
希望有帮助
# 3 楼答案
最简单的方法是使用JXLayer和LockableUI。 查看here以了解如何实现这一点的示例
还要注意的是,JXLayer将其转换成了Java7,并以javax.swing.JLayer的形式提供
另一件事是,您不应该在站点事件调度线程中执行长时间运行的任务。阅读SwingWorker和learn to write multithreaded code for Swing