Java语言程序设计基础篇_编程练习题**16.19(控制一组风扇)

news2024/11/15 13:26:28

**16.19(控制一组风扇)

  编写一个程序,在一组中显示三个风扇,有控制按钮来启动和停止整组风扇,如图16-44所示。

习题分析

  • 要完成这道题目,需要将16.18中的代码变成一个自定义面板(继承自BorderPane),再由第二个类去示例化三个风扇面板

代码示例

编程练习题16_19FanPane.java
package chapter_16;

import javafx.animation.KeyFrame;
import javafx.animation.RotateTransition;
import javafx.animation.Timeline;
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.control.Slider;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Arc;
import javafx.scene.shape.ArcType;
import javafx.scene.shape.Circle;
import javafx.util.Duration;

public class 编程练习题16_19FanPane extends BorderPane{
	private Timeline fanAnimation;
	private Arc arc1;
	private Arc arc2;
	private Arc arc3;
	private Arc arc4;
	private double x = 0;
	private double y = 0;
	private double angle = 30;
	private boolean direction = false;
	编程练习题16_19FanPane(){
		drawFan();
	}
	编程练习题16_19FanPane(double x, double y){
		setX(x);
		setY(y);
		drawFan();
	}
	public double getX() {
		return x;
	}
	public void setX(double x) {
		this.x = x;
	}
	public double getY() {
		return y;
	}
	public void setY(double y) {
		this.y = y;
	}
	public void pause() {
		fanAnimation.pause();
	}
	public void play() {
		fanAnimation.play();
	}
	public void reverse() {
		fanAnimation.setRate(fanAnimation.getRate() * -1);// 通过将动画的速率乘以-1,可以实现反转动画的效果。
		direction = !direction;
	}
	
	public void drawFan() {
		setLayoutX(636);
		setLayoutY(637);
		Pane pane = new Pane();
		Circle c = new Circle(x, y, 80);
		c.setStroke(Color.BLACK);
		c.setFill(Color.WHITE);
		pane.getChildren().add(c);
		
		int angle = 30;
			arc1 = new Arc(x, y, 70, 70, angle, 30);
			angle += 90;
			arc1.setFill(Color.BLUE);
			arc1.setType(ArcType.ROUND);
			arc2 = new Arc(x, y, 70, 70, angle, 30);
			angle += 90;
			arc2.setFill(Color.BLUE);
			arc2.setType(ArcType.ROUND);
			arc3 = new Arc(x, y, 70, 70, angle, 30);
			angle += 90;
			arc3.setFill(Color.BLUE);
			arc3.setType(ArcType.ROUND);
			arc4 = new Arc(x, y, 70, 70, angle, 30);
			angle += 90;
			arc4.setFill(Color.BLUE);
			arc4.setType(ArcType.ROUND);
			pane.getChildren().addAll(arc1,arc2,arc3, arc4);
		
		HBox hBox = new HBox();
		hBox.setAlignment(Pos.CENTER);
		hBox.setSpacing(5);
		Button btPause = new Button("Pause");
		Button btResume = new Button("Resume");
		Button btReverse = new Button("Reverse");
		hBox.getChildren().addAll(btPause, btResume, btReverse);
		
		Slider slider = new Slider(1,100,1);
		slider.setPrefWidth(200);
		HBox hBox2 = new HBox(slider);
		hBox2.setAlignment(Pos.CENTER);
		
		EventHandler<ActionEvent> eventHandler = e -> {
            setNewRotate();
        };
        
        fanAnimation = new Timeline();
        //此处设置注意
        fanAnimation.getKeyFrames().add(new KeyFrame(Duration.millis(50), eventHandler));
        fanAnimation.setCycleCount(Timeline.INDEFINITE);
        fanAnimation.play();
		  
		btPause.setOnMouseClicked(e -> pause());
		btResume.setOnMouseClicked(e -> play());
		btReverse.setOnMouseClicked(e -> {
			reverse();
		});
		slider.valueProperty().addListener(ov ->{
			fanAnimation.setRate(slider.getValue());
		});	

		setTop(hBox);
		setCenter(pane);
		setBottom(hBox2);
	}
	 public void setNewRotate()
	    {
	        if (direction)
	        {
	            angle = 10.0;
	        }
	        else
	        	angle = -10.0;

	        arc1.startAngleProperty().setValue((arc1.startAngleProperty().getValue() + angle) % 360);
	        arc2.startAngleProperty().setValue((arc2.startAngleProperty().getValue() + angle) % 360);
	        arc3.startAngleProperty().setValue((arc3.startAngleProperty().getValue() + angle) % 360);
	        arc4.startAngleProperty().setValue((arc4.startAngleProperty().getValue() + angle) % 360);
	    }
}
 编程练习题16_19ControlASetOfFans.java
package chapter_16;

import javafx.application.Application;
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.stage.Stage;

public class 编程练习题16_19ControlASetOfFans extends Application{
	@Override
	public void start(Stage primaryStage) throws Exception {
		HBox hBox = new HBox(10);
		编程练习题16_19FanPane fanPane = new 编程练习题16_19FanPane(100, 100);
		编程练习题16_19FanPane fanPane2 = new 编程练习题16_19FanPane(100, 100);
		编程练习题16_19FanPane fanPane3 = new 编程练习题16_19FanPane(100, 100);
		fanPane.setStyle("-fx-border-color:black");
		fanPane2.setStyle("-fx-border-color:black");
		fanPane3.setStyle("-fx-border-color:black");
		hBox.getChildren().addAll(fanPane,fanPane2,fanPane3);
		
		HBox hBox2 = new HBox(20);
		hBox2.setAlignment(Pos.CENTER);
		Button btStart = new Button("Start All");
		Button btStop = new Button("Stop All");
		hBox2.getChildren().addAll(btStart, btStop);
		
		btStop.setOnMouseClicked(e ->{
			fanPane.pause();
			fanPane2.pause();
			fanPane3.pause();
		});
		btStart.setOnMouseClicked(e ->{
			fanPane.play();
			fanPane2.play();
			fanPane3.play();
		});
		
		BorderPane borderPane = new BorderPane();
		borderPane.setCenter(hBox);
		borderPane.setBottom(hBox2);
		Scene scene = new Scene(borderPane,630, 250);
		primaryStage.setTitle("编程练习题16_19ControlASetOfFans");
		primaryStage.setScene(scene);
		primaryStage.show();
	}
	public static void main(String[] args) {
		Application.launch(args);
	}
}
  • 结果展示

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

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

相关文章

考研概率论如何复习最高效?能拿满分

概率论跟哪写老师的课程&#xff1f; 推荐三个老师&#xff1a; 喻老&#xff1a;基础讲的很好 喻老的线性代数课在今年已经非常有名&#xff0c;但其实他讲授的概率论课程同样十分出色。喻老的课程特点在于讲解非常细致&#xff0c;特别适合基础较为薄弱的学生。此外&#…

MySQL练手题——case when ... then ...

一、准备工作 Create table If Not Exists Seat (id int, student varchar(255)); Truncate table Seat; insert into Seat (id, student) values (1, Abbot); insert into Seat (id, student) values (2, Doris); insert into Seat (id, student) values (3, Emerson); inser…

spark3.3.4 上使用 pyspark 跑 python 任务版本不一致问题解决

问题描述 在 spark 上跑 python 任务最常见的异常就是下面的版本不一致问题了&#xff1a; RuntimeError: Python in worker has different version 3.7 than that in driver 3.6, PySpark cannot run with different minor versions. Please check environment variables PY…

PLM软件选型攻略:10款推荐工具全面解析

本篇文章中提到的工具包括&#xff1a;PingCode、Worktile、云效、目标圈&#xff08;Goal Circle&#xff09;、Mavenlink、SAP PLM、Basecamp、Scoro、明道云、Airtable。 在现代企业管理中&#xff0c;选择合适的PLM&#xff08;产品生命周期管理&#xff09;系统对提升产品…

pytorch下载慢,如何下载到本地再去安装,本地安装pytorch

有时候按部就班的用指令去安装pytorch&#xff0c;网上很慢&#xff0c;并且往往最后可能还没有安装成功。 本次&#xff0c;介绍一下如何将这个文件先下载到本地&#xff0c;然后在去安装。 至于如何安装pytorch&#xff0c;先看一下我之前写的 深度学习环境-------pytorch…

计算机毕业设计 家电销售展示平台 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

数据结构----队列和栈

小编会一直更新数据结构相关方面的知识&#xff0c;使用的语言是Java&#xff0c;但是其中的逻辑和思路并不影响&#xff0c;如果感兴趣可以关注合集。 希望大家看完之后可以自己去手敲实现一遍&#xff0c;同时在最后我也列出一些基本和经典的题目&#xff0c;可以尝试做一下。…

【数据结构】六、图:2.邻接矩阵、邻接表(有向图、无向图、带权图)

二、存储结构 文章目录 二、存储结构❗1.邻接矩阵1.1无向图❗邻接矩阵-无向图代码-C 1.2有向图❗邻接矩阵-有向图代码-C 1.3带权图1.4性能分析1.5相乘 ❗2.邻接表2.1无向图2.2有向图❗邻接表-C 邻接矩阵VS邻接表邻接矩阵邻接表 ❗1.邻接矩阵 图的邻接矩阵(Adjacency Matrix) 存…

Transformer在量化投资中的应用

开篇 深度学习的发展为我们创建下一代时间序列预测模型提供了强大的工具。深度人工神经网络&#xff0c;作为一种完全以数据驱动的方式学习时间动态的方法&#xff0c;特别适合寻找输入和输出之间复杂的非线性关系的挑战。最初&#xff0c;循环神经网络及其扩展的LSTM网络被设…

云计算实训26——部署LVS负载均衡项目

LVS LVS是linux virtural server的简称——免费、开源、四层负载均衡 工作原理&#xff1a; 通过linux达到负载均衡好和linux操作系统实现高性能高可用的linux服务集群&#xff0c;具有良好的可靠性、可扩展性、可操作性、可扩展性、从而实现以低廉的成本实现最优的性能。LV…

VisionPro二次开发学习笔记10-使用 PMAlign和Fixture固定Blob工具检测孔

使用 PMAlign和Fixture固定Blob工具检测孔 这个示例演示了如何使用 PMAlign 工具和 Fixture 工具来夹持一个 Blob 工具。示例代码将检测支架右上角孔的存在。当点击运行按钮时&#xff0c;将读取新图像。PMAlign 工具运行并生成一个 POSE 作为输出。POSE 是一个六自由度的变换…

Mybatis(1)

一. Mybatis概述 原本是Apache的一个开源项目叫iBatis,2010年迁移到Google Code旗下,改名为Mybatis Mybatis是一款优秀的持久层框架,是对JDBC的封装Mybatis几乎避免了JDBC所有的手动设置参数以及手动获取结果的操作Mybatis可以使用注解或XML文件来配置和映射,将数据库中的数据…

springboot发送邮箱功能的安全与加密配置?

springboot发送邮箱设置的步骤&#xff1f;springboot发信优势&#xff1f; 为了确保邮件发送过程的安全性和隐私保护&#xff0c;我们需要对 SpringBoot发送邮箱功能进行适当的安全与加密配置。AokSend将详细探讨如何在 SpringBoot项目中实现这些配置&#xff0c;以保障邮件传…

大模型面试题集锦:揭秘阿里24k Star项目背后的争议,非常详细收藏我这一篇就够了

今天分享两个 Github 上开源的不错的项目&#xff0c;以及阿里空 Github 项目的趣闻。 一、开源大模型面试题 大致看了以下&#xff0c;面试题分门别类&#xff0c;还是挺全的。包含 LLM 基础&#xff0c;分布式训练&#xff0c;推理&#xff0c;强化学习等。 二、Awesome Co…

记录|Git工具——下载GitHub项目

目录 前言一、Step 1. 下载Git二、Step2. 用Git Bash 下载到本地更新时间 前言 参考文章&#xff1a; 1、如何使用Git将Github项目拉到本地 2、git 安装、创建仓库、上传项目、克隆下载、常用命令 – 一篇文章总结&#xff08;适用github / gitee&#xff09; 3、Git的使用【入…

2024网页设计教程:最新趋势与实用技巧

网页是每个人访问信息的载体&#xff0c;用户点击的按钮、浏览的导航栏和网页界面的视觉性能都与网页制作有关。良好的网页设计代表了友好的使用体验。个人网页、商业网页和社交媒体平台都应该吸引人们的注意&#xff0c;并提供令人印象深刻的客户体验。本文针对网页制作新手&a…

CentOS7.6单机部署RabbitMQ消息队列——实施方案

1、前期环境准备 1.准备一台主机 IP地址主机名角色内存大小192.168.200.10 rabbitmq 消息队列 2G 2. 设置主机名 hostnamectl set-hostname 主机名suexit Ctrlr 3. 设置IP地址然后重启网卡 vim /etc/sysconfig/network-scripts/ifcfg-ens33systemctl restart network 4.…

【一图学技术】8.图解Git工作流程使用 git 解决团队协作中的冲突问题 git 进行版本控制的最佳实践Git 的高级功能

图解Git的工作流程 一、Git常见命令概述 以下是 Git 常用命令的详细作用、使用例子和使用场景&#xff1a; git add 作用&#xff1a;将工作目录中的更改添加到暂存区。暂存区是一个准备下一次提交的区域&#xff0c;它记录了你想要提交的更改。使用例子&#xff1a;git add …

【机器人】关于钉钉机器人如何进行自定义开发问答【详细清晰】

目标&#xff1a;当用户输入问题并钉钉机器人&#xff0c;钉钉机器人进行相应的回答&#xff0c;达到一种交互问答的效果 开发文档参考&#xff1a;https://open.dingtalk.com/document/orgapp/robot-overview 首先进行登录企业&#xff0c;后面如果没有进行登录&#xff0c;会…

html编写贪吃蛇页面小游戏(可以玩)

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>贪吃蛇小游戏</title><style>body {…