2016-10-22 4 views
0

Transitionクラスを使用して、シーンビルダで作成されたFigureをアニメートしようとしています。 コントローラ:アニメーションがFXMLControllerで動作しない

public class Controller{ 

@FXML 
private Line line1; 

@FXML 
private Line line2; 

@FXML 
private Line line3; 

@FXML 
private Rectangle rectangle1; 
private double mult_factor; 


private double rectangle_height; 

public Controller(){ 
    final Animation anim = new Transition() { 
     { 
      setCycleDuration(Duration.millis(3000)); 
     } 
     @Override 
     protected void interpolate(double frac) { 
      rectangle_height = rectangle1.getHeight(); 
      mult_factor = frac * 5.8; 
      rectangle1.setHeight(rectangle_height * mult_factor); 
     } 
    }; 
}} 

メインクラス:

public class FormTest extends Application { 

public static void main(String[] args) { 
    launch(args); 
} 

@Override 
public void start(Stage primaryStage) throws Exception { 
    primaryStage.setTitle("The container test"); 
    primaryStage.setHeight(600); 
    primaryStage.setWidth(600); 

    Pane pane = (Pane) FXMLLoader.load(FormTest.class.getResource("conf.fxml")); 
    Controller ctr = new Controller(); 
    primaryStage.setScene(new Scene(pane)); 
    primaryStage.show(); 

}} 

FXMLファイル:

<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="Controller"> 
    <children> 
    <Line fx:id="line1" endX="100.0" endY="300.0" layoutX="106.0" layoutY="70.0" startX="100.0" /> 
    <Line fx:id="line2" endX="100.0" endY="300.0" layoutX="300.0" layoutY="70.0" startX="100.0" /> 
    <Line fx:id="line3" endX="193.0" layoutX="207.0" layoutY="370.0" /> 
    <Rectangle fx:id="rectangle1" arcHeight="5.0" arcWidth="5.0" fill="DODGERBLUE" height="42.0" layoutX="207.0" layoutY="327.0" stroke="BLACK" strokeType="INSIDE" width="192.0" /> 
    </children> 
</Pane> 

シーンだけ表示されますが、何も起こりません、アニメーションは発生しません。私は何が間違っているの?

答えて

0

あなたは決してあなたがControllerinitialize()方法で行うことができ、アニメーションを、開始しません:

public class Controller{ 

    @FXML 
    private Line line1; 

    @FXML 
    private Line line2; 

    @FXML 
    private Line line3; 

    @FXML 
    private Rectangle rectangle1; 
    private double mult_factor; 


    private double rectangle_height; 

    public void initialize() { 
     final Animation anim = new Transition() { 
      { 
       setCycleDuration(Duration.millis(3000)); 
      } 
      @Override 
      protected void interpolate(double frac) { 
       rectangle_height = rectangle1.getHeight(); 
       mult_factor = frac * 5.8; 
       rectangle1.setHeight(rectangle_height * mult_factor); 
      } 
     }; 
     anim.play(); 
    } 

} 
アニメーションは、おそらくあなたはそれが何をしたいのかやっていない

が、その意志で少なくともそれを実行させる。

+0

まあ、うん、それは実現しなかった、ありがとう。しかし今は、なぜ私は、rectangle_height = rectangle1.getHeight();でNullPointerExceptionを取得しているのかわかりません。 –

+0

気にしないで、うまくいきました。私はinitializeメソッドを追加していませんでした。問題はアニメーションが私がやりたいことをしていないことですが、ちょっと別の小さな問題です。 ご協力いただきありがとうございます –

1

これはトリックを行う必要があります!

public Controller(){ 
>  final Animation anim = new Transition() { 
>   { 
>    setCycleDuration(Duration.millis(3000)); 
>   } 
>   @Override 
>   protected void interpolate(double frac) { 
>    rectangle_height = rectangle1.getHeight(); 
>    mult_factor = frac * 5.8; 
>    rectangle1.setHeight(rectangle_height * mult_factor); 
>   } 
>  }; 
> anim.play(); // <- start the actual animation 
    } 
} 
関連する問題