目录
题目:*16.21(秒表倒计时)
习题思路
代码示例
结果展示
题目:*16.21(秒表倒计时)
编写一个程序,允许用户在文本域中以秒为单位输入时间,然后按下Enter键来进行倒计时,如图16-45d所示。余下的秒数每秒重新显示一次。当倒计时结束时,程序开始播放音乐。
-
习题思路
- 创建一个BorderPane,创建一个私有TextField设置在BorderPane的中心。
- 为TextField注册键盘事件监听器,当Enter键被按下时,获取输入的内容,Play开始动画。
- 设置一个私有类型的Timeline动画,每隔1000毫秒(1秒)调用一次设置文本方法
- (设置文本方法)每调用方法一次,text中的秒数就减去1,直到0为止,设置一个新的文本表示音乐开始。
-
代码示例
编程练习题16_21Countdown.java
package chapter_16;
import java.io.File;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.BorderPane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.util.Duration;
public class 编程练习题16_21Countdown extends Application{
private MediaPlayer mediaPlayer;
private Timeline timerAnimation;
private TextField textField = new TextField();
private int time;
@Override
public void start(Stage primaryStage) throws Exception {
File mediaFile = new File("src/Music/Coming_Home-Peter_Jeremias.mp3");
String mediaURL = mediaFile.toURL().toString();
if (!mediaURL.startsWith("file:")) {
mediaURL = "file:" + mediaURL;
}
mediaPlayer = new MediaPlayer(new Media(mediaURL));
textField.setPrefHeight(60);
textField.setAlignment(Pos.CENTER);
textField.setFont(new Font("华文细黑", 48));
BorderPane borderPane = new BorderPane(textField);
textField.setOnKeyPressed(e ->{
if(e.getCode() == KeyCode.ENTER) {
time = Integer.valueOf(textField.getText())-1;
timerAnimation.play();
textField.setEditable(false);
}
});
EventHandler<ActionEvent> eventHandler = e -> {
setText();
};
timerAnimation = new Timeline(new KeyFrame(Duration.millis(1000), eventHandler));
timerAnimation.setCycleCount(Timeline.INDEFINITE);
Scene scene = new Scene(borderPane,350, 150);
primaryStage.setTitle("编程练习题16_21Countdown");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
public void setText() {
if(time == -1) {
timerAnimation.stop();
textField.setText("Play Music");
mediaPlayer.play();
}
else textField.setText(time--+"");
}
}
-
结果展示
纯音乐Peter Jeremias - Coming Home.mp3