Java语言程序设计基础篇_编程练习题**15.28(显示一个转动的风扇)

**15.28(显示一个转动的风扇)

编写一个程序显示一个转动的风扇,如图15-33c所示。Pause、Resume和Reverse按钮用于暂停、继续和反转风扇的转动

可修改编程练习题14_9的代码

  • 习题思路:
  1. 新建一个BorderPane,一个Pane和一个HBox,Pane用来装风扇,HBox用于装按钮
  2. 在Pane面板中新建一个大圆Cirlce,再用for循环绘制四个扇形Arc, 把arc的类型设为ROUND,开始角度每次循环增加90
  3. 创建一个RotateTransition对象,旋转的节点设为pane
  4. 把Pane设置在BorderPane的中心
  5. 创建三个按钮并添加到HBox中,每个按钮都有对应的注册方法(为实现风扇反转功能,可以把动画的速率乘以-1)
  6. 把HBox设置在BorderPane的底部

示例代码: 编程练习题15_28RotatingFan.java

package chapter_15;

import javafx.animation.RotateTransition;
import javafx.animation.Timeline;
import javafx.application.Application;
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.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Arc;
import javafx.scene.shape.ArcType;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.util.Duration;

public class 编程练习题15_28RotatingFan extends Application{
	@Override
	public void start(Stage primaryStage) throws Exception {
		Pane pane = new Pane();
		BorderPane borderPane = new BorderPane(pane);
		Scene scene = new Scene(borderPane, 400, 420);
		borderPane.setMinWidth(400);
		borderPane.setMinHeight(420);
		pane.setPadding(new Insets(15, 15, 15, 15));
		pane.setMaxWidth(400);
		pane.setMinWidth(400);
		pane.setMaxHeight(400);
		pane.setMinHeight(400);
		
		
		double x = 200;
		double y = 200;
		
		Circle c = new Circle(x, y, 80);
		c.setStroke(Color.BLACK);
		c.setFill(Color.WHITE);
		pane.getChildren().add(c);
		
		int angle = 30;
		for(int i = 0;i < 4;i++) {
			Arc arc1 = new Arc(x, y, 70, 70, angle, 30);
			angle += 90;
			arc1.setFill(Color.BLUE);
			arc1.setType(ArcType.ROUND);
			pane.getChildren().add(arc1);
		}
		RotateTransition rt = new RotateTransition(
				Duration.millis(3000),pane);
		  rt.setByAngle(360);
		  rt.setCycleCount(Timeline.INDEFINITE);
		  rt.play();
		borderPane.setCenter(pane);
		
		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);
		
		btPause.setOnMouseClicked(e -> rt.pause());
		btResume.setOnMouseClicked(e -> rt.play());
		btReverse.setOnMouseClicked(e -> rt.setRate(rt.getRate() * -1));// 通过将动画的速率乘以-1,可以实现反转动画的效果。
		borderPane.setBottom(hBox);
		primaryStage.setTitle("编程练习题15_28RotatingFan");
		primaryStage.setScene(scene);
		primaryStage.show();
	}
	public static void main(String[] args) {
		Application.launch(args);
	}
}
  •  结果展示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值