Java 倒计时窗口关闭

Java 倒计时窗口关闭,java,swing,Java,Swing,当计时器窗口完成30秒时,如何通过代码关闭计时器窗口 这是我的密码 import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.text.SimpleDateFormat; import java.util.Date; class CountdownTimer extends JFrame { private static final long serialVersionUID = -36

当计时器窗口完成30秒时,如何通过代码关闭计时器窗口

这是我的密码

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.text.SimpleDateFormat;
import java.util.Date;

class CountdownTimer extends JFrame {

    private static final long serialVersionUID = -3613327984360590187L;

    public CountdownTimer() {

        setTitle("Countdown Timer");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final long MINUTES = 30000;
        final SimpleDateFormat sdf = new SimpleDateFormat("mm : ss");
        final JLabel clock = new JLabel(sdf.format(new Date(MINUTES)), JLabel.CENTER);
        JLabel text = new JLabel("Time Remaining: ");
        int x = 0;
        ActionListener actionListener = new ActionListener() {
            long x = MINUTES - 1000;

            public void actionPerformed(ActionEvent ae) {
                clock.setText(sdf.format(new Date(x)));
                x -= 1000;
            }
        };
        new javax.swing.Timer(1000, actionListener).start();

        JPanel jPanel = new JPanel();
        jPanel.add(text);
        jPanel.add(clock);
        getContentPane().add(jPanel);
        pack();

    }

    public static void main(String args[]) {

        new CountdownTimer().setVisible(true);

    }
}
this.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
当计时器窗口完成30秒时,如何通过代码关闭计时器窗口

这是我的代码

试试这个:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.text.SimpleDateFormat;
import java.util.Date;

class CountdownTimer extends JFrame {

    private static final long serialVersionUID = -3613327984360590187L;

    public CountdownTimer() {

        setTitle("Countdown Timer");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final long MINUTES = 30000;
        final SimpleDateFormat sdf = new SimpleDateFormat("mm : ss");
        final JLabel clock = new JLabel(sdf.format(new Date(MINUTES)), JLabel.CENTER);
        JLabel text = new JLabel("Time Remaining: ");
        int x = 0;
        ActionListener actionListener = new ActionListener() {
            long x = MINUTES - 1000;

            public void actionPerformed(ActionEvent ae) {
                clock.setText(sdf.format(new Date(x)));
                x -= 1000;
            }
        };
        new javax.swing.Timer(1000, actionListener).start();

        JPanel jPanel = new JPanel();
        jPanel.add(text);
        jPanel.add(clock);
        getContentPane().add(jPanel);
        pack();

    }

    public static void main(String args[]) {

        new CountdownTimer().setVisible(true);

    }
}
this.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
public void actionPerformed(ActionEvent ae) {
    clock.setText(sdf.format(new Date(x)));
    x -= 1000;
    if (x < 0) // Add this line
        CountdownTimer.this.dispose(); // And this one too
}
public void actionPerformed(ActionEvent ae){
clock.setText(sdf.format(新日期(x));
x-=1000;
if(x<0)//添加此行
倒计时。this.dispose();//还有这个
}

调用
dispose()
x
在他的代码中是
时,它将是
dispatchEvent(新的WindowEvent(CountdownTimer.this,WindowEvent.WINDOW\u CLOSING)),最复杂的表达方式是
yourFrame.setVisible(false)…我以为他真的想关闭这个程序。@Holger,难道这不是隐藏窗口吗?其中之一:
dispose()
dispatchEvent()
System.exit(0)
将是OP想要的,我猜。对,我忽略了
setDefaultCloseOperation
调用。然而,每种可能性都有一种简单的形式:
HIDE\u ON\u CLOSE
→ <代码>设置可见(假)
在关闭时处理
→ <代码>处置()
在关闭时退出→ <代码>系统退出(0)。在这两种情况下,
dispatchEvent
都是不必要的。