当前位置: 首页 > 知识库问答 >
问题:

将Swing JDialog设置为非模态

周伟泽
2023-03-14

我在将JDialog设置为非模态时遇到问题。我需要在不阻止应用程序其余部分的情况下显示弹出窗口。我尝试使用SwingUtilities.invoke稍后(),但顾名思义,它是在主线程工作完成后很久才调用的。为了简化,这是我的代码:

BufferedReader reader = new BufferedReader(new FileReader(log));
        JLabel validator = new JLabel("Validating  - please wait");
        JOptionPane pane = new JOptionPane(validator, JOptionPane.INFORMATION_MESSAGE,JOptionPane.NO_OPTION,null, new String[]{"Close"});
        final JDialog dialog = pane.createDialog(null, "title");
        dialog.setModal(false);
        dialog.setVisible(true);
        dialog.setVisible(true);
        writer = validate(reader);
        dialog.dispose();

对话框会显示出来,但它是空的。如果我将其用作模式,它会显示得很好。我尝试在某些变体中使用它,例如:

JLabel validator = new JLabel("Validating - please wait");
            JOptionPane pane = new JOptionPane(validator, JOptionPane.INFORMATION_MESSAGE,JOptionPane.NO_OPTION,null, new String[]{"Close"});
            final JDialog dialog = pane.createDialog(null, "Validation in progress");
            Runnable run = new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    dialog.setModal(false);
                    dialog.setVisible(true);
                }

            };
            SwingUtilities.invokeLater(run);
            writer = validate(reader);

但是正如我所说,对话框对我来说调用得太晚了。(我也尝试了调用和等待,但由于我无法从主线程调用它,我不得不创建一个新线程,所以结果几乎相同。

你有什么建议吗?

共有1个答案

尚鸿才
2023-03-14

在显示模式JDialog之前,需要启动代码处理,然后显示对话框。如果验证方法需要很长时间,您可能可以使用后台线程。类似这样:

BufferedReader reader = new BufferedReader(new FileReader(log));
JLabel validator = new JLabel("Validating  - please wait");
JOptionPane pane = new JOptionPane(validator, JOptionPane.INFORMATION_MESSAGE,JOptionPane.NO_OPTION,null, new String[]{"Close"});
final JDialog dialog = pane.createDialog(null, "title");
dialog.setModal(true);

SwingWorker myWorker = new SwingWorker<String, Void>() {
  public void doInBackground() {
     // do long running process
     // perhaps including
     writer = validate(reader);

     // ....

     return yourString;
  }

  public void done() {  
    update JLabel
    dispose of dialog here!
  }
};
myWorker.execute();
dialog.setVisible(true);
 类似资料:
  • 问题内容: 在numpy中我有一个数组 将超低值设置为零的最快,最简单的方法是什么 效率不是最重要的。 问题答案: 嗯 我对此并不满意,但这似乎可行: 您可以根据自己的问题选择容忍度。我通常使用一个数量级以上 但这取决于问题。

  • 问题内容: 我正在研究RoR,并将此虚拟机设置为“部署” RoR,并且陷入了Node.js的安装过程。 我正在使用Ubuntu 12.04,并且遵循了本指南的这一步骤: http://railsapps.github.com/installing- rails.html 从Rails 3.1开始,在Ubuntu Linux上进行开发需要JavaScript运行时(Mac OS X或Windows则

  • 我正在尝试从Java/Spring软件发送电子邮件。我正在使用spring框架的JavaMailSender。如何将本地计算机配置为JavaMailSender的smtp主机?我可以通过以下命令发送电子邮件: 然而,我怎样才能写我的邮件。支持上述命令的属性? 这是我的javaMailSender bean: 这是mail.properties文件:

  • 我已经用PyCharm建立了我的第一个烧瓶项目,这是我的应用程序。py文件: 我想在调试模式下运行我的项目,这样我就不必每次发生变化时都重新启动服务器。我提供应用程序。使用debug=True参数运行函数,但这似乎不会更改调试标志。然而,应用程序确实启动了,我确实在页面上看到了“TEST”,但这是在调试标志设置为False的情况下进行的。 我还尝试直接用os.environ["FLASK_DEBU

  • 问题内容: 我正在使用Spring将JMS连接工厂注入到我的Java应用程序中。由于仅在生产环境中才需要该工厂,但是在开发过程中却不需要,因此我将Bean定义放入单独的XML中,并将其包含在主applicationContext.xml中。在生产环境中,此额外文件包含常规bean定义。在我的本地开发环境中,我希望此bean为null。当Spring遇到一个未知的引用ID时,试图完全完全删除Bean

  • 如何在NumberPicker中更改字体类型。我试着这样做,但字体不变。有什么想法吗?P、 S:颜色和文本大小正在更改。 字体和路径工作正常。我将其用于自定义文本视图。