有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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); 

共 (3) 个答案

  1. # 1 楼答案

    使用modal dialog,尝试以下操作:

                    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,它将拦截用户的任何事件

  2. # 2 楼答案

    这就是模态对话框的要点,在“框”之外不会发生任何交互。模式弹出窗口也会在等待用户输入时停止线程。如果你想在显示对话框时做其他事情,你要么在对话框中做,要么启动一个新线程来处理

    希望有帮助