• 用JavaFX显示一个转动的风扇


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

    package javaseniorprograme;
    
    import javafx.animation.KeyFrame;
    import javafx.animation.KeyValue;
    import javafx.animation.Timeline;
    import javafx.scene.paint.Color;
    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.scene.layout.Pane;
    import javafx.scene.shape.Arc;
    import javafx.scene.shape.ArcType;
    import javafx.scene.shape.Circle;
    import javafx.stage.Stage;
    import javafx.util.Duration;
    
    /**
     * 显示一个转动的风扇
     * @author ASUS
     */
    public class Exercise15_28 extends Application{
        @Override
        public void start(Stage stage){
            // 创建一个圆
            Circle c = new Circle(250,135,125,Color.WHITE);
            c.setStroke(Color.BLACK);
            // 创建三个按钮
            Button bt1 = new Button("Pause");
            Button bt2 = new Button("Resume");
            Button bt3 = new Button("Reverse");
            // 创建一个HBox
            HBox hbox = new HBox();
            hbox.setAlignment(Pos.CENTER);
            hbox.setSpacing(20); 
            hbox.getChildren().addAll(bt1,bt2,bt3);
            // 创建四个Arc
            Arc[] a = new Arc[4];
            for(int i = 0; i < 4; i++){
                a[i] = new Arc(250,135,120,120,90*i,30);
                a[i].setStroke(Color.BLACK); 
                a[i].setFill(Color.BLACK); 
                a[i].setType(ArcType.ROUND);
            }
            // 创建时间轴动画,顺时针动画与逆时针动画
            Timeline timeline1 = new Timeline();
            timeline1.setCycleCount(Timeline.INDEFINITE);
            Timeline timeline2 = new Timeline();
            timeline2.setCycleCount(Timeline.INDEFINITE);
            Duration duration = Duration.millis(2000);
            KeyValue[] kv1 = new KeyValue[4];
            KeyFrame[] kf1 = new KeyFrame[4];
            KeyValue[] kv2 = new KeyValue[4];
            KeyFrame[] kf2 = new KeyFrame[4];
            for(int j = 0; j < 4; j++){
                kv1[j] = new KeyValue(a[j].startAngleProperty(), 360+a[j].getStartAngle());
                kf1[j] = new KeyFrame(duration,kv1);
                timeline1.getKeyFrames().add(kf1[j]);
                kv2[j] = new KeyValue(a[j].startAngleProperty(), -360+a[j].getStartAngle());
                kf2[j] = new KeyFrame(duration,kv2);
                timeline2.getKeyFrames().add(kf2[j]);
            }
            bt2.setOnMouseClicked(e->{
                timeline2.pause();
                timeline1.play();
            });
            bt1.setOnMouseClicked(e->{
                timeline1.pause();
                timeline2.pause();
            });
            bt3.setOnMouseClicked(e->{
                timeline1.pause();
                timeline2.play();
            });
            // 创建一个Pane
            Pane pa = new Pane();
            pa.getChildren().addAll(c,a[0],a[1],a[2],a[3]);
            // 创建一个BorderPane
            BorderPane pane = new BorderPane();
            pane.setCenter(pa); 
            pane.setBottom(hbox); 
            Scene scene = new Scene(pane,500,320);
            stage.setTitle("Exercise16_03");
            stage.setScene(scene);
            stage.show();
        }
        
        /**
         * 
         * @param args
         */
        public static void main(String[] args){
            Application.launch(args); 
        }
    }
    爱我没结果!
  • 相关阅读:
    【Django】django 处理request流程细节(转)
    【Django】request 处理流程(转)
    【Django】中间件
    【HTML】DocType
    【CSS】伪类与伪元素
    【nodejs】nodejs 的linux安装(转)
    【chrome】 chrome 开发者工具
    【samba】samba 用户权限配置(转)
    form表单组件
    自定义分页器
  • 原文地址:https://www.cnblogs.com/angoli/p/12728665.html
Copyright © 2020-2023  润新知