Java Swing:如何禁止JFrame/JDialog之外的交互?
我想在执行线程时显示progressbar并阻止与我的应用程序框架的交互 在另一个线程中,有人建议使用JDialog代替JFrame和Java Swing:如何禁止JFrame/JDialog之外的交互?,java,swing,jframe,jdialog,Java,Swing,Jframe,Jdialog,我想在执行线程时显示progressbar并阻止与我的应用程序框架的交互 在另一个线程中,有人建议使用JDialog代替JFrame和setModal(true)。但是,执行此操作时,对话框会阻止整个应用程序 这基本上是我的代码: MyDialog dlg = new MyDialog(); dlg.setModal(true); dlg.setVisible(true); //do some stuff.... //(never executed when setModal(
setModal(true)
。但是,执行此操作时,对话框会阻止整个应用程序
这基本上是我的代码:
MyDialog dlg = new MyDialog();
dlg.setModal(true);
dlg.setVisible(true);
//do some stuff....
//(never executed when setModal(true)
dlg.setVisible(false);
最简单的方法是使用JXLayer和LockableUI。 请举例说明如何做到这一点 还要注意的是,JXLayer将其制作成了Java7,并且可以作为
另一件事是,您不应该在站点事件调度线程中执行长时间运行的任务。阅读和。这是模式对话框的要点,在“框”之外不会发生任何交互。模式弹出窗口在等待用户输入时也会停止线程。如果你想在显示对话框时做其他事情,你要么在对话框中做,要么启动一个新线程来处理
希望有帮助 使用模态对话框,尝试以下操作:
final JDialog dlg = new JDialog();
dlg.setModal(true);
dlg.setSize(500, 500);
dlg.addWindowListener(new WindowAdapter() {
@Override
public void windowActivated(WindowEvent e) { //or other method
new Thread(new Runnable() {
public void run() {
try {
//execute your long running task
} //you should catch exception
finally {
dlg.setVisible(false);
dlg.dispose();
}
}
}).start();
}
});
dlg.setVisible(true);
我还可以在JFrame上设置GlassPane,它将拦截来自用户的任何事件。确保在实现该对话框之前完成所有操作。