当前位置: 首页 > news >正文

Java语言程序设计基础篇_编程练习题*16.7 (设置时钟的时间)

*16.7 (设置时钟的时间)

    编写一个程序,显示一个时钟,并通过在三个文本域中输入小时、分钟和秒 钟来设置时钟的时间,如图16-38b 所示。使用程序清单14-21的ClockPane改变时钟大小使其居于面板中央

  • 习题思路
  1. 实例化一个ClockPane(在程序清单14_21),创建一个HBox布局
  2. 新建三个Label和三个TextField,添加到HBox布局中
  3. 为三个TextField分别注册一个键盘事件,当在输入框中按下Enter键且内容不为空时, 调用ClockPane的设置时间的方法(如clockPane.setHour(hour))
  4. 创建一个BorderPane,把ClockPane设置在中心,把HBox设置在底部
  5. 创建Scene并运行代码
  •  代码示例

 编程练习题16_7SetClockTime.java

package chapter_16;import chapter_14.程序清单14_21ClockPane;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;public class 编程练习题16_7SetClockTime extends Application{@Overridepublic void start(Stage primaryStage) throws Exception {程序清单14_21ClockPane clockPane = new 程序清单14_21ClockPane();HBox hBox = new HBox(5);hBox.setPadding(new Insets(5, 5, 5, 5));hBox.setAlignment(Pos.CENTER);Label lbHour = new Label("Hour");TextField tfHour = new TextField();Label lbMinute = new Label("Minute");TextField tfMinute = new TextField();Label lbSecond = new Label("Second");TextField tfSecond = new TextField();tfHour.setPrefWidth(40);tfMinute.setPrefWidth(40);tfSecond.setPrefWidth(40);hBox.getChildren().addAll(lbHour,tfHour, lbMinute,tfMinute, lbSecond,tfSecond);tfHour.setOnKeyPressed(e ->{if(e.getCode() == KeyCode.ENTER&&tfHour.getText()!="") {int hour = Integer.parseInt(tfHour.getText());clockPane.setHour(hour);}});tfMinute.setOnKeyPressed(e ->{if(e.getCode() == KeyCode.ENTER&&tfMinute.getText()!="") {int minute = Integer.parseInt(tfMinute.getText());clockPane.setMinute(minute);}});tfSecond.setOnKeyPressed(e ->{if(e.getCode() == KeyCode.ENTER&&tfSecond.getText()!="") {int second = Integer.parseInt(tfSecond.getText());clockPane.setSecond(second);}});BorderPane borderPane = new BorderPane();borderPane.setCenter(clockPane);borderPane.setBottom(hBox);Scene scene = new Scene(borderPane,268, 300);primaryStage.setTitle("编程练习题16_7SetClockTime");primaryStage.setScene(scene);primaryStage.show();}public static void main(String[] args) {Application.launch(args);}
}

程序清单14_21ClockPane.java 

package chapter_14;import java.util.Calendar;
import java.util.GregorianCalendar;import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Line;
import javafx.scene.text.Text;public class 程序清单14_21ClockPane extends Pane{private int hour;private int minute;private int second;private boolean hourHandVisible = true;private boolean minuteHandVisible = true;private boolean secondHandVisible = true;private double w = 250,h = 250;public 程序清单14_21ClockPane() {setCurrentTime();}public 程序清单14_21ClockPane(int hour) {this.hour = hour;minute = 0;paintClock();}public 程序清单14_21ClockPane(int hour, int minute) {this.hour = hour;this.minute = minute;second = 0;paintClock();}public 程序清单14_21ClockPane(int hour, int minute, int second) {this.hour = hour;this.minute = minute;this.second = second;paintClock();}public int getHour() {return hour;}public void setHour(int hour) {this.hour = hour;paintClock();}public int getMinute() {return minute;}public void setMinute(int minute) {this.minute = minute;paintClock();}public int getSecond() {return second;}public void setSecond(int second) {this.second = second;paintClock();}public double getW() {return w;}public void setW(double w) {this.w = w;paintClock();}public double getH() {return h;}public void setH(double h) {this.h = h;paintClock();}public boolean getHourHandVisible() {return hourHandVisible;}public boolean getMinuteHandVisible() {return minuteHandVisible;}public boolean getSecondHandVisible() {return secondHandVisible;}public void setHourHandVisible(boolean hourHandVisible) {this.hourHandVisible = hourHandVisible;paintClock();}public void setMinuteHandVisible(boolean minuteHandVisible) {this.minuteHandVisible = minuteHandVisible;paintClock();}public void setSecondHandVisible(boolean secondHandVisible) {this.secondHandVisible = secondHandVisible;paintClock();}public void setCurrentTime() {Calendar calendar = new GregorianCalendar();this.hour = calendar.get(Calendar.HOUR_OF_DAY);this.minute = calendar.get(Calendar.MINUTE);this.second = calendar.get(Calendar.SECOND);paintClock();}protected void paintClock() {double clockRadius = Math.min(w, h) * 0.8 * 0.5;double centerX = w / 2;double centerY = h / 2;Circle circle = new Circle(centerX, centerY, clockRadius);circle.setFill(Color.WHITE);circle.setStroke(Color.BLACK);double sLength = clockRadius * 0.8;double sencondX = centerX + sLength * Math.sin(second * (2*Math.PI/60));double sencondY = centerY - sLength * Math.cos(second * (2*Math.PI/60));Line sLine = new Line(centerX, centerY, sencondX, sencondY);sLine.setStroke(Color.RED);double mLength = clockRadius * 0.65;double xMinute = centerX + mLength * Math.sin(minute * (2 * Math.PI / 60));double minuteY = centerY - mLength * Math.cos(minute * (2 * Math.PI / 60));Line mLine = new Line(centerX, centerY, xMinute, minuteY);mLine.setStroke(Color.BLUE);double hLength = clockRadius * 0.5;double hourX = centerX + hLength *Math.sin((hour % 12+minute/60.0) * (2*Math.PI / 12));double hourY = centerY - hLength * Math.cos((hour % 12 + minute / 60.0) * (2 * Math.PI / 12));Line hLine = new Line(centerX, centerY, hourX, hourY);hLine.setStroke(Color.GREEN);getChildren().clear();getChildren().add(circle);if(getHourHandVisible()==true) {getChildren().add(hLine);}if (getMinuteHandVisible()==true) { getChildren().add(mLine);}if(getSecondHandVisible()==true) {getChildren().add(sLine);}for(int i = -90;i < 270;i+=30) {double angle = Math.toRadians(i);double x = centerX-2 + (clockRadius-20) * Math.cos(angle); double y = centerY+3 + (clockRadius-20) * Math.sin(angle);double LineX = centerX-7 + (clockRadius-7) * Math.cos(angle); double LineY = centerY+4 + (clockRadius-7) * Math.sin(angle);int time = i/30+3;if(time == 0)time = 12;Text t = new Text(x,y,time+"");Text line = new Text(LineX,LineY,"—");line.setRotate(i);getChildren().add(t);getChildren().add(line);}for(int i = -90;i < 270;i+=6) {double angle = Math.toRadians(i);double LineX = centerX-3  + (clockRadius-3) * Math.cos(angle); double LineY = centerY+4.5 + (clockRadius-2.5) * Math.sin(angle);Text line = new Text(LineX,LineY,"-");line.setRotate(i);getChildren().add(line);}}
}
  • 结果展示

相关文章:

Java语言程序设计基础篇_编程练习题*16.7 (设置时钟的时间)

*16.7 (设置时钟的时间) 编写一个程序&#xff0c;显示一个时钟&#xff0c;并通过在三个文本域中输入小时、分钟和秒 钟来设置时钟的时间&#xff0c;如图16-38b 所示。使用程序清单14-21的ClockPane改变时钟大小使其居于面板中央 习题思路 实例化一个ClockPane(在程序清单1…...

YOLOv8新版本支持实时检测Transformer(RT-DETR)、SAM分割一切

原文:YOLOv8新版本支持实时检测Transformer(RT-DETR)、SAM分割一切 - 知乎 (zhihu.com) 一、SAM 分割任何模型 (Segment Anything Model - SAM) 是一种突破性的图像分割模型,可实现具有实时性能的快速分割。 项目地址 https://github.com/facebookresearch/segment-…...

【传输层协议】UDP和TCP协议

文章目录 UDP协议UDP特点UDP的缓冲区基于UDP的应用层协议 TCP协议6位标志位&#xff1a;确认应答机制超时重传机制连接管理机制&#xff08;握手和挥手&#xff09;服务端状态转换过程客户端状态转换过程TIME_WAIT状态CLOSE_WAIT状态 为什么是三次握手和四次挥手滑动窗口如果发…...

Java Excel复杂表头,表头合并单元格

Java Excel复杂表头&#xff0c;表头合并单元格 效果预览 一、maven依赖 <!--操作excel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.1</version><scope>test</…...

Java整合腾讯云发送短信实战Demo

简介 在现代应用开发中&#xff0c;短信服务是非常重要的功能之一。它可以用于用户验证、通知等各种场景。本文将介绍如何使用Java整合腾讯云短信服务&#xff0c;并提供一个完整的实战示例代码。 环境准备 在开始之前&#xff0c;确保你已经完成以下准备工作&#xff1a; 注…...

电路中电阻,电容和电感作用总结

电阻作用 1&#xff0c;上拉电阻 电阻的连接一般是一端接上拉的电源&#xff08;一般与芯片信号的电压值相匹配&#xff09;&#xff0c;另一端连接芯片引脚所对应的信号大概如下图 功能&#xff1a;一、预置某些引脚的功能&#xff0c;例如复位信号拉高&#xff08;失能&…...

OrangePi AIpro学习1 —— 烧写和ssh系统

目录 一、下载烧写工具和系统 二、烧写和启动 2.1 烧写和启动 2.2 烧写失败后的问题解决 三、串口连接到主机 3.1 串口连接到主机 四、网络连接到主机 4.1 修改香橙派IP地址 4.2 win11配置以太网静态ip 4.4 主机和香橙派直连 4.5 主机和香橙派连接到同一个路由器 五…...

Gather 全球化进程迅速 多重利好推动未来发展

在过去的几周里&#xff0c;Gather的全球化发展十分迅速&#xff0c;并取得了一系列重要成绩&#xff0c;这些成绩进一步巩固了Gather在区块链和去中心化通信领域的地位&#xff0c;并为未来的发展注入了强劲的动力。 $GAT代币成功进驻多家顶级交易所 7月19日&#xff0c;Gath…...

面试经典 222. 完全二叉树的节点个数

二叉树我最近刷的特别多&#xff0c;差不多快刷完了&#xff0c;但是有一种题型差点给我忽略了&#xff0c;那就是完全二叉树&#xff0c;这也是一个很重要的题型&#xff0c;今天刚好有一道题目可以来复习一下完全二叉树的特性 题目链接如下&#xff1a;https://leetcode.cn/…...

【css】3d柱状图-vue组件版

创建一个响应式圆柱形进度条组件 在现代网页设计中&#xff0c;圆柱形进度条是一种非常流行的视觉元素&#xff0c;用于展示数据的进度或状态。本文将介绍如何使用Vue.js和LESS创建一个响应式的圆柱形进度条组件。 组件结构 我们的组件由两部分组成&#xff1a;一个圆柱形的…...

《计算机组成原理》(第3版)第3章 系统总线 复习笔记

第3章 系统总线 一、总线的基本概念 总线是连接多个部件的信息传输线&#xff0c;是各部件共享的传输介质&#xff0c;如图3-1所示。 图3-1 面向CPU的双总线结构框图 倘若将CPU、主存和I/O设备都挂到一组总线上&#xff0c;便形成单总线结构的计算机&#xff0c;如图3-2所示…...

【网络安全】https协议的加密方案避免中间人攻击(MITM攻击)导致的数据泄露风险

目录 引言 概念准备 中间人 加密 数据摘要 && 数据指纹 数字签名 密钥加密 中间人攻击 CA证书 https加密的解决方案 个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 引言 http在应用层协议中是明文传输协议&#xff0c;它是通信双方传输数据时的一种约定。【…...

拼多多商家电话采集 拼多多店铺爬虫软件使用教程

拼多多商家电话采集和店铺爬虫软件使用教程&#xff1a; 商家电话采集&#xff1a; a. 打开拼多多网站&#xff0c;进入需要采集电话号码的店铺页面。 b. 打开浏览器开发者工具&#xff08;一般按F12键或右键选择“检查”&#xff09;。 c. 在开发者工具中切换到“网络”或“Ne…...

RK3566 MIPI屏调试记录

文章目录 1. 前言2. 环境介绍3. 思路介绍4. 确认要修改的设备树文件5. 设备树中修改关键引脚5.1. 添加dsi0节点5.2. 修改屏幕背光引脚5.3. 添加屏幕复位引脚5.4. 添加屏幕使能引脚 6. 修改屏幕timing参数7. 修改上下电时序8. 修改初始化序列和反初始化序列9. 显示路由配置10. 最…...

爬虫数据模拟真实设备请求头User-Agent生成(fake_useragent:一个超强的Python库)

在Python开发中&#xff0c;处理HTTP请求时经常需要模拟不同的用户代理&#xff08;User-Agent&#xff09;来绕过网站的反爬虫机制或进行兼容性测试。fake_useragent正是这样一个强大的Python库&#xff0c;它能够生成随机且多样化的用户代理字符串&#xff0c;让你的请求看起…...

【教育宝-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…...

3.达梦数据库基础运维管理

文章目录 前言一、基础数据库管理权限角色管理1.1 DM 系统管理员的类型1.2 角色责则分类 DM 数据库2.1 数据库评估2.2 状态和模式 参考内容 前言 本篇博客为上一篇博客的进阶版&#xff0c;主要针对常规达梦数据库的基本管理上面 一、基础数据库管理 权限角色管理 1.1 DM 系…...

【Linux】【系统纪元】Linux起源与环境安装

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《C游记》《进击的C》《Linux迷航》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 一、Linux的起源1.1 计算机硬件1.2 计算机软件 二、Linux的环境安装2.1 安装方式2.2 安装版本2.3 安装过程2.4 远程…...

Android笔试面试题AI答之Activity(9)

文章目录 1.如何在Application中获取当前Activity实例 &#xff1f;方法一&#xff1a;使用全局变量或单例方法二&#xff1a;使用LocalBroadcastManager或EventBus方法三&#xff1a;通过Fragment方法四&#xff1a;使用Service和Intent注意事项 2.Activity A跳转Activity B&a…...

什么是嵌入式

1、什么是嵌入式 对专用设备的控制&#xff0c;把不需要的功能能够裁剪、删除&#xff0c;适配于专用设备&#xff0c;就叫做嵌入式&#xff08;也叫做嵌入式系统&#xff09; 嵌入式系统定义&#xff1a;用于控制、监视或者辅助机器和设备的运行 一个嵌入式系统由硬件和软件…...

SAM 2:Segment Anything in Images and Videos 论文详解

SAM 2:Segment Anything in Images and Videos 文章目录 SAM 2:Segment Anything in Images and Videos摘要1 Introduction具体分析 2 Related work具体分析&#xff1a; 3 任务&#xff1a;可提示的视觉分割4 模型具体分析具体分析 5 数据5.1 Data engine5.2 SA - V数据集 6 Z…...

PYTHON专题-(10)基操之我要玩并发

什么是并发&#xff1f; 并发指的是两个或多个事件在同一时间间隔内发生。在计算机科学中&#xff0c;并发通常指的是一个程序同时执行多个独立的任务。这些任务可以同时进行&#xff0c;而不会相互干扰或阻塞彼此。并发可以提高程序的执行效率和资源利用率&#xff0c;但也需要…...

双指针实现删除字符串中的所有相邻重复项

class Solution:def removeDuplicates(self, s: str) -> str:res list(s)slow fast 0length len(res)while fast < length:# 如果一样直接换&#xff0c;不一样会把后面的填在slow的位置res[slow] res[fast]# 如果发现和前一个一样&#xff0c;就退一格指针if slow …...

vue(vue2和vue3)项目打包去除console.log

1.Vue2去除 module.exports { configureWebpack: (config) > {// 取消console打印config.optimization.minimizer[0].options.terserOptions.compress.drop_console truereturn {name: "项目名称",resolve: {alias: {"": resolve("src")}}…...

Visual Studio 2022社区版、专业版、企业版功能对比表

https://visualstudio.microsoft.com/zh-hans/vs/compare/...

Codeforces 888 div3 A-G

A. Escalator Conversations 分析 二者身高差为k的倍数且不超过m-1倍&#xff0c;身高差不能为0&#xff08;即不能在同一个阶梯&#xff09; C代码 #include<iostream> using namespace std; void solve(){int n,m,k,H,ans0;cin>>n>>m>>k>>H;…...

IDEA如何去掉编辑框右侧的竖线

打开 IntelliJ Idea 软件 依次找到 File—>Settings—>Editor—>General—>Appearance 去掉勾选 Show hard wrap and visual guides (configured in Code Style options)...

3DCoat v2023 激活版下载与安装教程 (数字雕刻程序)

前言 3DCoat 是一款数字雕塑软件&#xff0c;由乌克兰开发。该软件专注于游戏模型的细节设计&#xff0c;集三维模型实时纹理绘制和细节雕刻功能为一身&#xff0c;可以加速细节设计流程&#xff0c;在更短的时间内创造出更多的内容。 一、下载地址 下载链接&#xff1a;分享…...

【Unity/XLua】xlua自带教程示例分析(一)——打印Hello world

第一步 创建Monobehavior脚本 public class Helloworld : MonoBehaviour {void Start(){} }第二步 在类中或Start函数中创建Lua虚拟机环境 LuaEnv luaenv new LuaEnv();第三步 使用LuaEnv的DoString方法直接运行字符串存储的lua语句&#xff08;字符串前使用可强制不进行转义…...

虚拟机(VMware16)安装rocky9.2详细过程,附镜像下载链接

rocky官方站点 链接: 官方站点 rocky9.2镜像下载路径 链接: Rocky-x86_64-dvd.iso 打开虚拟机&#xff0c;选择新建虚拟机 新建虚拟机 选择典型 由于VMware16没有rocky的版本&#xff0c;所以我们这里选择其他liunx 5.x 内核 64位 因为rocky9默认内核版本就是5开头的&#xf…...