【问题标题】:How to close a JDialog after a certain period of timeopened from a Jframe如何在从 Jframe 打开一段时间后关闭 JDialog
【发布时间】:2019-05-19 08:06:13
【问题描述】:

所以我正在尝试使用带有 MYSQL JDBC 连接的 Java Swing 表单制作一个购物车应用程序,在应用程序的一部分中,当用户单击“查看产品”之类的按钮时,机器需要一些时间来加载来自数据库的信息并在应用程序中输出,所以在那段时间我想显示一个加载图标,直到工作完成。为了实现这一点,我创建了一个单独的 JDialog 用于显示加载 gif,并从 JFrame 打开它在按钮的 ActionPerformed 事件上。这是我的工作:

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        JDialog dialog = new loader(this, true);
        dialog.setLocationRelativeTo(this);
        dialog.setVisible(true);
        Timer timer = new Timer(1000, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                dialog.dispose();
            }
        });
        timer.setRepeats(false);
        timer.start();
    }

但是,正如 Stack Overflow 上其他 QA 所建议的那样,使用 Swing Timer 在 1 秒后关闭 JDialog 并没有按预期工作,所以有什么方法可以完成此任务,即在 a 后关闭 JDialog 窗口某段时间?

【问题讨论】:

  • 我回答是为了解释您为什么观察到这种行为。但我不明白为什么你会在一秒钟后关闭对话框,而不是在数据加载并可以显示后关闭。
  • 你说得对,因为我对此还很陌生,我想不出比这更好的解决方案,如果你也能告诉我如何实现这一点,那就太好了。
  • docs.oracle.com/javase/8/docs/api/javax/swing/SwingWorker.html。将第一个示例中的label.setText(get()); 替换为dialog.dispose(),您就有了解决方案。

标签: java swing jframe jdialog


【解决方案1】:

您的对话框是模态的。所以setVisible(true) 方法调用在对话框关闭之前不会返回。因此,只有在关闭对话框后才会创建计时器。

您需要使对话框可见之前创建并启动它。

【讨论】:

    猜你喜欢
    • 2022-12-03
    • 2015-08-03
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 2015-10-15
    • 2014-08-10
    相关资源
    最近更新 更多