Java

java图形界面倒计时效果怎么实现

小亿
171
2023-12-16 13:01:52
栏目: 编程语言

在Java图形界面中实现倒计时效果,可以使用Swing或JavaFX库来创建界面和计时器。

  1. 使用Swing库:
    • 创建一个JFrame窗体对象。
    • 在窗体中添加一个JLabel组件来显示倒计时时间。
    • 创建一个Timer对象来实现倒计时功能,并在每次计时结束时更新JLabel的文本。
    • 设置窗体的大小、可见性等属性,并监听窗体的关闭事件来停止计时器。
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class CountdownTimer extends JFrame {
    private JLabel countdownLabel;
    private Timer timer;
    private int countdown;

    public CountdownTimer(int countdown) {
        this.countdown = countdown;

        countdownLabel = new JLabel(String.valueOf(countdown), SwingConstants.CENTER);
        countdownLabel.setFont(new Font("Arial", Font.BOLD, 48));

        timer = new Timer(1000, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                countdown--;
                countdownLabel.setText(String.valueOf(countdown));
                
                if (countdown <= 0) {
                    timer.stop();
                    JOptionPane.showMessageDialog(null, "倒计时结束!");
                }
            }
        });

        add(countdownLabel);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300, 200);
        setVisible(true);
        timer.start();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new CountdownTimer(10);
            }
        });
    }
}
  1. 使用JavaFX库:
    • 创建一个Stage对象作为窗口容器。
    • 添加一个Label组件来显示倒计时时间。
    • 创建一个Timeline对象来实现倒计时功能,并在每次计时结束时更新Label的文本。
    • 设置Stage的大小、标题等属性,并监听窗口关闭事件来停止计时器。
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.util.Duration;

public class CountdownTimer extends Application {
    private Label countdownLabel;
    private Timeline timeline;
    private int countdown;

    @Override
    public void start(Stage primaryStage) {
        countdown = 10;

        countdownLabel = new Label(String.valueOf(countdown));
        countdownLabel.setStyle("-fx-font-size: 48px");

        EventHandler<ActionEvent> eventHandler = e -> {
            countdown--;
            countdownLabel.setText(String.valueOf(countdown));

            if (countdown <= 0) {
                timeline.stop();
                primaryStage.close();
                System.out.println("倒计时结束!");
            }
        };

        timeline = new Timeline(new KeyFrame(Duration.seconds(1), eventHandler));
        timeline.setCycleCount(countdown);

        StackPane root = new StackPane();
        root.getChildren().add(countdownLabel);

        Scene scene = new Scene(root, 300, 200);
        primaryStage.setTitle("倒计时");
        primaryStage.setScene(scene);
        primaryStage.show();

        timeline.play();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

以上是两种常用的在Java图形界面中实现倒计时效果的方法,根据具体需求和使用的GUI库选择其中一种方式进行实现。

0
看了该问题的人还看了