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

news2024/11/16 0:40:02

目录

题目:*16.20(累计秒表)

习题思路

代码示例

 结果展示


题目:*16.20(累计秒表)

  编写一个程序,模拟一个秒表,如图16-45a所示。当用户单击Start按钮时,按钮的标签变为Pause,如图16-45b所示。当用户单击Pause按钮时,按钮的标签变为Resume,如图16-45c所示。Clear按钮重设计数为0并且重设按钮的标签为Start。

  • 习题思路
  1. 创建一个文本Text和两个按钮Button,用三个Long类型的参数表示开始时间、结束时间、总时长。
  2. 创建一个HBox,把两个按钮放进来,再创建一个BorderPane,将Text设置在中心,将HBox设置在底部。
  3. 为第一个按钮注册事件监听器,可以用一个int或者Boolean表示秒表当前的状态,从而设置按钮上的文本。
  4. 为第二个按钮注册事件监听器,当事件触发时停止动画,将总时长参数设置为0。
  5. 分别设置开始计时方法、暂停计时方法、重新开始计时方法,在第一个按钮的事件监听器上根据秒表当前状态调用。
  6. 创建一个Timeline对象来循环将时间设置到Text上
  • 代码示例

编程练习题16_20AccumulatedStopwatch.java

package chapter_16;

import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.util.Duration;

public class 编程练习题16_20AccumulatedStopwatch extends Application{
	private Timeline timerAnimation;
	private int Control = 0;//0为停止(Start),1为进行中(Pause),2为暂停(Resume)
	private	Button btControl = new Button("Start");
	private	Button btClear = new Button("Clear");
	private Text text = new Text("00:00:00");
	private long startTime;
	private long endTime;
	private long allTime = 0;
	@Override
	public void start(Stage primaryStage) throws Exception {
		text.setFont(new Font("华文细黑", 48));
		
		HBox hBox = new HBox(10);
		hBox.setPadding(new Insets(5, 5, 5, 5));
		hBox.setAlignment(Pos.CENTER);
		hBox.getChildren().addAll(btControl,btClear);
		
		BorderPane borderPane = new BorderPane();
		borderPane.setCenter(text);
		borderPane.setBottom(hBox);
		
		btControl.setOnMouseClicked(e ->{
			if(btControl.getText().equals("Start"))
				Control = 0;
			else if(btControl.getText().equals("Pause"))
				Control = 1;
			else if(btControl.getText().equals("Resume"))
				Control = 2;
			setBtText(Control);
			setText();
		});
		
		btClear.setOnMouseClicked(e->{
			pause();
			allTime = 0;
			text.setText("00:00:00");
		});
		
		EventHandler<ActionEvent> eventHandler = e -> {
			if(Control == 0||Control == 1) {
				 long currentTime = System.currentTimeMillis();  
	                allTime += currentTime - startTime;  
	                startTime = currentTime;  
	                setText();
			}
        };
        
        timerAnimation = new Timeline(new KeyFrame(Duration.millis(100), eventHandler));
        timerAnimation.setCycleCount(Timeline.INDEFINITE);
        
		
		Scene scene = new Scene(borderPane,350, 150);
		primaryStage.setTitle("编程练习题16_20AccumulatedStopwatch");
		primaryStage.setScene(scene);
		primaryStage.show();
	}
	public static void main(String[] args) {
		Application.launch(args);
	}
	public void setBtText(int control) {
		switch (control) {
		case 0: btControl.setText("Pause");start();break;
		case 1: btControl.setText("Resume");pause();break;
		case 2: btControl.setText("Pause");resume();break;
		}
	}
	public void start() {
		Control = 1;
		startTime = System.currentTimeMillis();
		timerAnimation.play();
	}
	public void pause() {
		Control = 2;
		endTime = System.currentTimeMillis();
		allTime += endTime - startTime;
		timerAnimation.stop();
		
	}
	public void resume() {
		Control = 0;
		start();
	}
	public void setText() {
		long seconds = allTime/1000%60;
		long minutes = allTime/1000/60%60;
		long hours = allTime/1000/60/60%24;
		text.setText(String.format("%02d:%02d:%02d", hours, minutes, seconds));  
	}
}
  •  结果展示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2034354.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AHB协议解读

1.定义 AHB或者ASB系统总线在需要做大量数据传送的模块之间提供了高带宽的接口。同时&#xff0c;外围总线APB在AHB或者ASB和低带宽的外围设备之间提供了通信的桥梁。所以APB是AHB或者ASB的二级扩展总线 2.拓扑结构 2.1 Master: 可以是CPU、DMA控制器、外设控制器等。Maste…

国内外AI大语言模型推荐分享 除了Chatgpt 你会选择哪个模型?

当前AI技术飞速发展&#xff0c;Ai已经成为许多人日常工作和生活中不可或缺的工具&#xff0c;特别是以大语言模型为首的人工智能&#xff0c;它能够与我们进行自然语言对话&#xff0c;支持多种应用场景&#xff0c;如技术问答、代码生成、内容创作等&#xff0c;而且适用于各…

js入门经典学习小结

简介 js是解释型语言&#xff0c;虽然名字有java&#xff0c;但和java&#xff0c;c等编译型语言不同&#xff0c;它是解释型的&#xff0c;类似perl&#xff0c;py 历史 90年代最早js 1.0版本是网景navigator2引入的 然后欧洲计算机制造商协会&#xff08;ECMA&#xff09…

链上数字供应链高级研修班举办 隆道总裁吴树贵分享供应链数字化实践

8月8日-8月9日&#xff0c;链上数字产业研究院联合中国物流与采购联合会举办的“链上数字供应链高级研修班”在上海开班&#xff0c;隆道公司总裁吴树贵作为培训讲师出席&#xff0c;并系统地分享了供应链理论及数字化转型创新实践经验。 “链上数字供应链高级研修班”旨在贯彻…

TCP详解(一)报文详情/MSS/MTU

本文旨在介绍TCP的报文格式详情和传输层、链路层的字节数限制 1 TCP 协议的报文格式 TCP 报文段包括协议首部和数据两部分&#xff0c;协议首部的固定部分是 20 个字节&#xff0c;头部是固定部分&#xff0c;后面是选项部分。 1.1 端口号 16位源端口&#xff1a;发送方主机…

笔记:在WPF中如何控件级全局事件和应用程序级全局事件

一、目的&#xff1a;在WPF中如何控件级全局事件和应用程序级全局事件 二、实现 应用程序级全局事件 //注册应用程序级全局事件 EventManager.RegisterClassHandler(typeof(Button), Button.ClickEvent, new RoutedEventHandler(ic_event_Click)); 如上代码既会注册全局Butt…

Linux--C语言之循环结构

文章目录 一、循环结构&#xff08;一&#xff09;循环的概念&#xff08;二&#xff09;循环的类型&#xff08;三&#xff09;循环的构成&#xff08;四&#xff09;当型循环的实现while死循环 &#xff08;五&#xff09;for...总结死循环 &#xff08;七&#xff09;循环实…

数据结构:链式二叉树(2)

目录 前言 一、节点个数 1.1 二叉树的节点个数 1.2 二叉树叶子节点个数 1.3 二叉树第k层节点个数 二、查找值为x的节点 三、判断二叉树是否为完全二叉树 前言 上一篇 链式二叉树&#xff08;1&#xff09;&#xff0c;主要是讲了了一些链式二叉树的实现基础以及链式二叉…

day28 代码随想录 | 贪心 买卖股票 跳跃游戏 K次取反

买卖股票的最佳时机 II 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买&#xff0c;然后在 同一天 出售。返回 你能获得的 …

测绘工程项目管理系统,为测绘企业量身定制!测绘项目一体化管理

在日益复杂的测绘工程项目管理领域&#xff0c;高效、精准的信息化管理成为提升工作效率、降低运营成本的关键。企智汇软件&#xff0c;作为一款专为勘察、设计、监测、测绘等多元化工程项目量身打造的管理系统&#xff0c;正逐步成为行业内的佼佼者。 企智汇测绘管理系统深度…

Java FX 学习

声明&#xff1a;参考视频 一. Stage与Scene 舞台与场景&#xff1a;JavaFX应用程序将Ul容器定义为舞台&#xff08;Stage&#xff09;与场景&#xff08;Scene&#xff09;Stage类是顶级容器&#xff0c;它对应于窗体&#xff0c;其内容由Scene决定。Scene类是所有可视化内容…

运维监控体系实践与探索

在当今的数字化时代&#xff0c;运维工作作为企业IT服务的核心&#xff0c;面临着前所未有的挑战与机遇。随着业务规模的扩大和技术栈的复杂化&#xff0c;如何确保系统稳定运行、高效响应&#xff0c;成为运维团队亟需解决的问题。监控体系作为运维工作的基石&#xff0c;其建…

Python+selenium基于PO模式的Web自动化测试框架详解

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、什么是Selenium&#xff1f; Selenium是一个基于浏览器的自动化测试工具&#xff0c;它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主…

分布式锁 分布式锁解决了什么问题 如何实现 看门狗机制是什么

分布式锁的基本概念 在 Redis 中实现分布式锁的常用方式是通过 SETNX 命令&#xff08;SET with NX option&#xff09;来设置一个键&#xff08;key&#xff09;&#xff0c;这个键代表锁。如果 key 不存在&#xff0c;SETNX 会设置成功&#xff0c;并返回 1&#xff0c;表示…

【LinuxPython】linux中通过源码方式安装python环境

python环境安装直接看第二部分即可。 文章目录 1.背景2.python安装3.包环境复制 1.背景 部署一个线上任务时&#xff0c;相同的代码本地开发机正常产出数据&#xff0c;线上产出数据为0&#xff0c;排查到原因是&#xff1a; ...File "/home/disk1/wangdeyong/venv/pyth…

linux搭建zabbix

zabbix简介 Zabbix是一个监控系统&#xff0c;它可以帮助我们实时检查设备的状态&#xff0c;比如服务器、网络设备等。当设备出现问题时&#xff0c;它会及时通知我们&#xff0c;让我们可以采取措施来解决。同时&#xff0c;它还可以把收集到的数据转化成图表和报告&#xf…

ITL-Internet Technology Letters

文章目录 一、期刊简介二、征稿信息三、投稿须知四、咨询 一、期刊简介 Internet Technology Letters本期旨在涵盖所有用于提高物联网性能的新兴或现代学习算法。在此背景下&#xff0c;我们打算收集有关物联网学习进展的研究论文。强烈鼓励与机器学习、计算智能、概率学习、统…

树和图()

预备知识&#xff08;可以不看&#xff09;&#xff1a; 无向图可以理解为是特殊的有向图 1. 图的遍历&#xff08;因为树可以理解为是特殊的图&#xff0c;因此这里不考虑树的遍历&#xff0c;只考虑图的遍历&#xff09; 给定一个具体的图&#xff0c;便于分析 下面是树的结构…

Servlet——个人笔记

Servlet——个人笔记 文章目录 [toc]Servlet简介Servlet命名Servlet由来实现过程 Servlet 相对 CGI 的优势简要说说什么是CGI Servlet 在IDEA中开发流程Servlet注解方式配置WebServlet注解源码WebServlet注解使用 Servlet常见容器Servlet 生命周期简介测试 Servlet 方法init()…

交叉编译util-linux

参考文章&#xff1a;https://www.cnblogs.com/wanglouxiaozi/p/17836701.html 1、下载源码 https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.39/2、编译 解压压缩包&#xff1a; sudo tar xvf util-linux-2.39.2.tar.gz执行autogen.sh生成configure ./aut…