繁体   English   中英

在swing 1.5中指定的时间后自动关闭非模态对话框

[英]Automatically close non-modal dialogs after specified time in swing 1.5

在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
  1. 为了更好地帮助发布SSCCE ,没有关于MultiThreading代码或描述

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

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

  4. (指向第2位。)只是将JDialog HIDE_ON_CLOSE覆盖为HIDE_ON_CLOSE

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

  6. 使用@camickr的Application Inactivity

在此示例中 ,包含直接 JOptionPane的无模式JDialog在关闭之前向下计数到零。 附近包含标签的JFrame保持响应。

附录:由于@mKorbel有助于注释,您的类可以使用PropertyChangeListener来了解对话框的选项窗格何时关闭。 这是一个方便的功能JOptionPane ,但您可以添加自己的支持,如图所示这里

图片

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM