广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 软件教程 > Java技术 > 正文

惠州JavaFX时间轴事件是什么?_北大青鸟IT学校

作者:邓华发布时间:2021-05-22分类:Java技术浏览:828


导读:大家知道JavaFX时间轴事件是什么吗?下面惠州北大青鸟老师给大家科普一下JavaFX时间轴事件,希望对大家学习有帮助。

大家知道JavaFX时间轴事件是什么吗?下面惠州北大青鸟老师给大家科普一下JavaFX时间轴事件,希望对大家学习有帮助。

/*
* Copyright (c) 2011, Pro JavaFX Authors
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
*    this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
*    this list of conditions and the following disclaimer in the documentation
*    and/or other materials provided with the distribution.
* 3. Neither the name of JFXtras nor the names of its contributors may be used
*    to endorse or promote products derived from this software without
*    specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* Metronome1Main.fx - A simple example of animation using a Timeline
*
*  Developed 2011 by James L. Weaver jim.weaver [at] javafxpert.com
*  as a JavaFX SDK 2.0 example for the Pro JavaFX book.
*/import javafx.animation.AnimationTimer;import javafx.animation.KeyFrame;import javafx.animation.KeyValue;import javafx.animation.Timeline;import javafx.application.Application;import javafx.event.ActionEvent;import javafx.event.EventHandler;import javafx.scene.Group;import javafx.scene.Scene;import javafx.scene.effect.Lighting;import javafx.scene.layout.StackPane;import javafx.scene.paint.Color;import javafx.scene.shape.Circle;import javafx.scene.text.Text;import javafx.stage.Stage;import javafx.util.Duration;
public class Main extends Application {    
   //main timeline    private Timeline timeline;    private AnimationTimer timer;
   //variable for storing actual frame    private Integer i=0;

   @Override public void start(Stage stage) {
       Group p = new Group();
       Scene scene = new Scene(p);
       stage.setScene(scene);
       stage.setWidth(500);
       stage.setHeight(500);
       p.setTranslateX(80);
       p.setTranslateY(80);
       //create a circle with effect        final Circle circle = new Circle(20,  Color.rgb(156,216,255));
       circle.setEffect(new Lighting());        //create a text inside a circle        final Text text = new Text (i.toString());
       text.setStroke(Color.BLACK);        //create a layout for circle with text inside        final StackPane stack = new StackPane();
       stack.getChildren().addAll(circle, text);
       stack.setLayoutX(30);
       stack.setLayoutY(30);

       p.getChildren().add(stack);
       stage.show();
       //create a timeline for moving the circle        timeline = new Timeline();
       timeline.setCycleCount(Timeline.INDEFINITE);
       timeline.setAutoReverse(true);
       //You can add a specific action when each frame is started.        timer = new AnimationTimer() {
           @Override            public void handle(long l) {
               text.setText(i.toString());
               i++;
           }
       };
       //create a keyValue with factory: scaling the circle 2times        KeyValue keyValueX = new KeyValue(stack.scaleXProperty(), 2);
       KeyValue keyValueY = new KeyValue(stack.scaleYProperty(), 2);
       //create a keyFrame, the keyValue is reached at time 2s        Duration duration = Duration.millis(2000);        //one can add a specific action when the keyframe is reached        EventHandler onFinished = new EventHandler<ActionEvent>() {            public void handle(ActionEvent t) {
                stack.setTranslateX(java.lang.Math.random()*200-100);                 //reset counter                 i = 0;
           }
       };

       KeyFrame keyFrame = new KeyFrame(duration, onFinished , keyValueX, keyValueY);
       //add the keyframe to the timeline        timeline.getKeyFrames().add(keyFrame);

       timeline.play();
       timer.start();
   }        
       
   public static void main(String[] args) {
       Application.launch(args);
   }
 }
 

上面的代码生成以下结果。

JavaFX时间轴动画2.png

想了解更多关于Java的知识,联系在线客服,或者来惠州北大青鸟新方舟校区了解一下。

标签:惠州计算机JAVA软件开发惠州计算机Java软件开发惠州计算机JAVA培训惠州计算机JAVA软件开发学校惠州计算机Java软件开发培训JAVAJava软件开发北大青鸟IT计算机学校北大青鸟IT软件学校北大青鸟IT学校


Java技术排行
标签列表
网站分类
文章归档
最近发表