【问题标题】:Dialog box that disappear automatically自动消失的对话框
【发布时间】:2014-03-03 09:45:25
【问题描述】:

我正在开发一个应用程序。我希望当我退出它时,会出现一个消息框,其中包含消息,例如“感谢使用软考勤”。然后在几秒钟后自动消失。

我为此编写了如下代码:

public void windowClosing(WindowEvent e){
        int whichOption;
        whichOption=JOptionPane.showConfirmDialog(f1,"Are you Serious?","Soft Attendence",JOptionPane.YES_NO_OPTION);
        if(whichOption==JOptionPane.YES_OPTION){
            f1.dispose();
            JOptionPane.showMessageDialog(null,"Thanks for using Soft Attendence");
        }
    }

当我单击退出按钮时,会出现一个确认对话框,然后单击是按钮 应用程序退出并出现另一个消息框。

Now I have two questions in my mind :

第一个问题是我已经处理了应用程序,然后显示了消息框。 在其父被杀死后显示消息框是否可以?

当出现第二个消息框时,我不想单击“确定”按钮。我希望它应该自动消失。所以我的第二个问题是如何显示一段时间后自动消失的消息框?

【问题讨论】:

标签: java swing joptionpane windowlistener


【解决方案1】:
Is it fine to show message box after its parent is killed? 

我认为这不是一个理想的情况。但是如果 parentComponent 没有 Frame JOptionPane.showConfirmDialog(null,"..."); 则可以打开对话框@

How to shown message box that disappear automatically after some time?

自动一次性你可以通过一个技巧来获得它,你可以创建一个SwingWorker,它通常在后台线程中执行 GUI 交互任务。设置一个计时器,它将在一段时间后执行并明确关闭您的对话框。

class AutoDisposer extends SwingWorker<Boolean, Object> {
   @Override
   public String doInBackground() {
       try{
           JOptionPane.getRootFrame().dispose();
           return Boolean.True;
       }catch(Exception ex){...}
       return Boolean.False;
   }
}

...

new Timer(seconds * 1000, autoDisposer).start();

【讨论】:

  • JOptionPane.getRootFrame().dispose();必须包裹在invokeLater中,doInBackground()执行Workers Thread,从未通知EDT
  • 谢谢....但我以其他方式做到了,首先隐藏应用程序,然后在等待 Thread.sleep() 一段时间后显示对话框,然后处理应用程序....
猜你喜欢
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
相关资源
最近更新 更多