1

在 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
4

2 回答 2

2

在此示例JDialog中,包含直接 JOptionPane的无模式在关闭前倒计时至零。JFrame包含标签的附近保持响应。

附录:正如@mKorbel 有用的评论,您的班级可以使用 aPropertyChangeListener来了解对话框的选项窗格何时关闭。这是 的一个方便的功能JOptionPane但您可以添加自己的支持,如此处所示

图片

于 2012-10-02T16:36:13.710 回答
2
  1. 为了获得更好的帮助,请尽快发布SSCCE,没有关于MultiThreading

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

  3. 从WindowListener覆盖适当的事件,您可以在此之前调用您的自定义代码dipose()setVisible()ei

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

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

  6. 使用@camickr 的应用程序不活动

于 2012-10-02T12:30:32.080 回答