2013-05-19 65 views
3

是否可以使用Timeline摇动主舞台,所以使用XTimeline和YTimeLine?在javaFX中摇晃舞台

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); 

回答

3

试试这个..

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(); 
    } 
3

此演示(也可作为gist)的完整源代码:

enter image description here

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(); 
    } 
}