生成之后,要点击确定按钮才会关闭此信息提示对话框,
我想在想让它在5秒之后自动关闭该怎么写下面的代码呢?

解决方案 »

  1.   

    final JOptionPane options = ...;
    final JDialog  dialog = options.createDialog(...);
    final javax.swing.Timer timer = new javax.swing.Timer(5000, // 5s delay
                                      new ActionListener(){
                                           public void actionPerformed(ActionEvent e){
                                               dialog.dispose();
                                           }
                                      });
    dialog.addComponentListener(new ComponentAdapter(){
             public void componentShown(ComponentEvent e){
                  timer.start();
             }
        });
      

  2.   

    这里我看的还不是很清楚,我现在做的是一个按钮的事件,当我按下按钮时,弹出一个信息对话框,按钮的事件我以加载好,就是下面这段代码。
    JOptionPane.showMessageDialog(null, "输入 的数字不合法请输入"+p+"~"+q);
    让这个对话框,定时5秒自动关闭
    Timer这个计时器为什么要加载那么多事件呢还有那么多内部类,我现在还看不明白。
      

  3.   

    这个很新鲜,还真没往这方面想过在其他线程中对swing组件进行操作,是否有多线程风险?此处是否有必要用 SwingWorker ?请指教
      

  4.   


    //定义一个倒计时自动消失的窗口类
    public class TimeDialog { private String message = null;
    private int secends = 0;
    private JLabel label = new JLabel();
    private JDialog dialog = null; public void showDialog(JFrame father, String message, int sec) {
    this.message = message;
    secends = sec;
    label.setText(message+"  本窗口 "+secends+" 秒后关闭自动");
    ScheduledExecutorService s = Executors.newSingleThreadScheduledExecutor();
    dialog = new JDialog(father, "提示信息", true);
    dialog.add(label);
    s.scheduleAtFixedRate(new Runnable() {

    @Override
    public void run() {
    // TODO Auto-generated method stub

    TimeDialog.this.secends--;
    if(TimeDialog.this.secends == 0) {
    TimeDialog.this.dialog.dispose();
    }else {
    label.setText(TimeDialog.this.message+"  本窗口 "+secends+" 秒后关闭自动");
    }
    }
    }, 1, 1, TimeUnit.SECONDS);
    dialog.pack();
    dialog.setLocationRelativeTo(father);
    dialog.setVisible(true);
    }

    }
    //在你的程序中,用下面的语句弹出一个倒计时窗口
    TimeDialog d = new TimeDialog();
    d.showDialog(MyFrame.this, "你好", 5);// MyFrame是程序主窗口类,弹出的对话框5秒后消失
      

  5.   

    Thread.sleep(5000);
    然后dispose不就可以了吗,为什么搞那么复杂
      

  6.   


    //定义一个倒计时自动消失的窗口类
    public class TimeDialog { private String message = null;
    private int secends = 0;
    private JLabel label = new JLabel();
    private JDialog dialog = null;
            private ScheduledExecutorService s; public void showDialog(JFrame father, String message, int sec) {
    this.message = message;
    secends = sec;
    label.setText(message+"  本窗口 "+secends+" 秒后关闭自动");
    s = Executors.newSingleThreadScheduledExecutor();
    dialog = new JDialog(father, "提示信息", true);
    dialog.add(label);
    s.scheduleAtFixedRate(new Runnable() {

    @Override
    public void run() {
    // TODO Auto-generated method stub

    TimeDialog.this.secends--;
    if(TimeDialog.this.secends == 0) {
    TimeDialog.this.dialog.dispose();
                                            TimeDialog.this.s.shutdown();
    }else {
    label.setText(TimeDialog.this.message+"  本窗口 "+secends+" 秒后关闭自动");
    }
    }
    }, 1, 1, TimeUnit.SECONDS);
    dialog.pack();
    dialog.setLocationRelativeTo(father);
    dialog.setVisible(true);
    }

    }
    //在你的程序中,用下面的语句弹出一个倒计时窗口
    TimeDialog d = new TimeDialog();
    d.showDialog(MyFrame.this, "你好", 5);// MyFrame是程序主窗口类,弹出的对话框5秒后消失稍微修改了下楼上的bug 
    加了一句TimeDialog.this.s.shutdown();
    不然窗口弹得越多,线程就越来越多