Java语言程序设计基础篇_编程练习题**15.28(显示一个转动的风扇)
**15.28(显示一个转动的风扇)
编写一个程序显示一个转动的风扇,如图15-33c所示。Pause、Resume和Reverse按钮用于暂停、继续和反转风扇的转动
可修改编程练习题14_9的代码
- 习题思路:
- 新建一个BorderPane,一个Pane和一个HBox,Pane用来装风扇,HBox用于装按钮
- 在Pane面板中新建一个大圆Cirlce,再用for循环绘制四个扇形Arc, 把arc的类型设为ROUND,开始角度每次循环增加90
- 创建一个RotateTransition对象,旋转的节点设为pane
- 把Pane设置在BorderPane的中心
- 创建三个按钮并添加到HBox中,每个按钮都有对应的注册方法(为实现风扇反转功能,可以把动画的速率乘以-1)
- 把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{@Overridepublic 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);}
}
- 结果展示