【问题标题】:Automatically close non-modal dialogs after specified time in swing 1.5在swing 1.5中指定时间后自动关闭非模态对话框
【发布时间】:2012-10-02 12:23:41
【问题描述】:

在 Swing for Java 1.5 中,我想创建一个对话框,允许用户在后台执行其他操作。我希望这个对话框有一个按钮,你可以用它来关闭对话框。如果用户没有在 X 秒内关闭对话框,它应该自行关闭。在这两种情况下,都必须在对话框关闭后执行例程。

我尝试将 Swing Timer 与模态对话框一起使用,它可以工作。但是,正如我上面注意到的,我需要一个非模态对话框。当我将 modal-Property 设置为 false 时,对话框立即消失。

有人知道,为什么会这样吗?

JOptionPane pane =  new JOptionPane (text, JOptionPane.WARNING_MESSAGE);
pane.setOptions(new String[]{"Close"});
final JDialog dialog = pane.createDialog(frame, title);
//dialog.setModal(false);

Timer timer = new Timer(time, new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        dialog.setVisible(false);
    }
});
timer.setRepeats(false);
timer.start();

dialog.setVisible(true);

//routine to do after the dialog disappears

【问题讨论】:

  • 您的代码适用于我,设置为模态或非模态。也许你的其余代码有问题?
  • 与 Rempelos 相同,在设置和不设置对话框模式的情况下测试了您的代码,并且它可以正常工作。除了您向我们展示的内容之外的其他内容未按预期工作。
  • 你用 Java 1.5 试过了吗?
  • 我用jdk1.6.0_33尝试了1.5的执行环境,没有安装1.5。

标签: java multithreading swing jdialog


【解决方案1】:
  1. 为了更好的帮助,请尽快发布SSCCE,这里没有关于MultiThreading的代码或描述

  2. 不要在运行时创建 final JDialog dialog = pane.createDialog(frame, title);,创建一次 JDialog 并将其重新用于另一操作,和/或从 ContentPane 中删除所有子项

  3. WindowListener覆盖正确的事件,您可以在dipose()setVisible() e.i.之前调用您的自定义代码

  4. (至第 2 点。)只需将 JDialog#setDefaultCloseOperation 覆盖为 HIDE_ON_CLOSE

  5. 在运行时调用新的Top-Level Container 的所有代码都必须封装到invokeLater() 中,尤其是setVisible(true)

  6. 使用Application Inactivity by @camickr

【讨论】:

  • here 引用的示例在无模式对话框中直接使用了JOptionPane
【解决方案2】:

在这个example 中,包含direct JOptionPane 的无模式JDialog 在关闭前倒计时到零。附近包含标签的 JFrame 仍保持响应。

附录:由于@mKorbel 很有帮助,您的班级可以使用PropertyChangeListener 来了解对话框的选项窗格何时关闭。这是JOptionPane 的方便feature,但您可以添加自己的支持,如图here

【讨论】:

  • aaach 现在我可以看到eeee //routine to do after the dialog disappears
  • 好点!我buried the lead;以上。
猜你喜欢
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 2021-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
相关资源
最近更新 更多