Java语言程序设计基础篇_编程练习题*16.21(秒表倒计时)

目录

题目:*16.21(秒表倒计时)

习题思路

代码示例

 结果展示


题目:*16.21(秒表倒计时)

  编写一个程序,允许用户在文本域中以秒为单位输入时间,然后按下Enter键来进行倒计时,如图16-45d所示。余下的秒数每秒重新显示一次。当倒计时结束时,程序开始播放音乐。

  • 习题思路

  1. 创建一个BorderPane,创建一个私有TextField设置在BorderPane的中心。
  2. 为TextField注册键盘事件监听器,当Enter键被按下时,获取输入的内容,Play开始动画。
  3. 设置一个私有类型的Timeline动画,每隔1000毫秒(1秒)调用一次设置文本方法
  4. (设置文本方法)每调用方法一次,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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值