【问题标题】:shaking Stage in javaFXjavaFX中的摇动舞台
【发布时间】:2013-05-14 03:38:24
【问题描述】:

是否可以用Timeline来撼动初级阶段,所以使用XTimeline和YTimeLine?

    final Timeline Xtimeline = new Timeline();//for Animate On X'-Stage
    Xtimeline.setCycleCount(Timeline.INDEFINITE);
    Xtimeline.setAutoReverse(true);
    final Timeline Ytimeline = new Timeline();//for Animate On Y'-Stage
    Ytimeline.setCycleCount(Timeline.INDEFINITE);
    Ytimeline.setAutoReverse(true);

【问题讨论】:

    标签: javafx-2 timeline stage


    【解决方案1】:

    此演示的完整代码(也可通过gist 获得):

    public class ShakingStage extends Application {
    
        public Stage primaryStage;
        boolean xyState= true;
    
        public static void main(String[] args) {
            launch(args);
        }
    
        @Override
        public void start(Stage stage) throws Exception {
            primaryStage= stage;
            Button shakeButton= ButtonBuilder.create()
                    .text("shake it")
                    .onAction(new EventHandler<ActionEvent>() {
                        @Override
                        public void handle(ActionEvent actionEvent) {
                            TimelineBuilder.create()
                                    .keyFrames(new KeyFrame(Duration.seconds(0.2), new EventHandler<ActionEvent>() {
                                        @Override
                                        public void handle(ActionEvent actionEvent) {
                                            if (xyState) {
                                                primaryStage.setX(primaryStage.getX() + 10);
                                                primaryStage.setY(primaryStage.getY() + 10);
                                            } else {
                                                primaryStage.setX(primaryStage.getX() - 10);
                                                primaryStage.setY(primaryStage.getY() - 10);
                                            }
                                            xyState= !xyState;
                                        }
                                    }))
                                    .autoReverse(true)
                                    .cycleCount(Timeline.INDEFINITE)
                                    .build().play();
                       }
                    })
                    .build();
    
            Scene scene= SceneBuilder.create()
                    .root(StackPaneBuilder.create()
                            .children(shakeButton)
                            .build()
                    )
                    .width(300)
                    .height(400)
                    .build();
    
            stage.setScene(scene);
            stage.show();
        }
    }
    

    【讨论】:

      【解决方案2】:

      试试这个..

      int x = 0;
      int y = 0;
      
      public void shakeStage() {
              Timeline timelineX = new Timeline(new KeyFrame(Duration.seconds(0.1), new EventHandler<ActionEvent>() {
                  @Override
                  public void handle(ActionEvent t) {
                      if (x == 0) {
                          primaryStage.setX(primaryStage.getX() + 10);
                          x = 1;
                      } else {
                          primaryStage.setX(primaryStage.getX() - 10);
                          x = 0;
                      }
                  }
              }));
      
              timelineX.setCycleCount(Timeline.INDEFINITE);
              timelineX.setAutoReverse(false);
              timelineX.play();
      
      
              Timeline timelineY = new Timeline(new KeyFrame(Duration.seconds(0.1), new EventHandler<ActionEvent>() {
                  @Override
                  public void handle(ActionEvent t) {
                      if (y == 0) {
                          primaryStage.setY(primaryStage.getY() + 10);
                          y = 1;
                      } else {
                          primaryStage.setY(primaryStage.getY() - 10);
                          y = 0;
                      }
                  }
              }));
      
              timelineY.setCycleCount(Timeline.INDEFINITE);
              timelineY.setAutoReverse(false);
              timelineY.play();
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-06
        • 1970-01-01
        • 2013-09-18
        • 2017-12-17
        • 1970-01-01
        • 2016-12-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多