2016-05-13 57 views
1

我想用我的節點的「寬度」製作動畫。如何用javafx中的節點寬度製作動畫/轉換?

在這種情況下,我的節點是一個「AnchorPane」。

我嘗試在javafx中創建導航抽屜。

沒有屬性「width Property()」?

new Key Value (node.width Property(), 1, WEB_EASE) 

node.widthProperty().getValue()未發現

我的代碼:

public void changeWidth(final Node node, double width) { 
    this.node = node; 
    this.timeline = TimelineBuilder.create() 
     .keyFrames(
      new KeyFrame(Duration.millis(20),  
       new KeyValue( going here? , width, WEB_EASE) 
      ) 
     ) 
     .build(); 

    setCycleDuration(Duration.seconds(5)); 
    setDelay(Duration.seconds(0)); 
} 

實施例中包含 「不透明度」 屬性:

new KeyValue(node.opacityProperty(), 1, WEB_EASE) 

我類ConfigAnimationViewPane:

public class ConfigAnimationViewPane extends Transition { 
    protected static final Interpolator WEB_EASE = Interpolator.EASE_BOTH; 
    protected AnchorPane node; 
    protected Timeline timeline; 
    private boolean oldCache = false; 
    private CacheHint oldCacheHint = CacheHint.DEFAULT; 
    private final boolean useCache = true; 



    /** 
    * Called when the animation is starting 
    */ 
    protected void starting() { 
     if (useCache) { 
      oldCache = node.isCache(); 
      oldCacheHint = node.getCacheHint(); 
      node.setCache(true); 
      node.setCacheHint(CacheHint.SPEED); 
     } 
    } 

    /** 
    * Called when the animation is stopping 
    */ 
    protected void stopping() { 
     if (useCache) { 
      node.setCache(oldCache); 
      node.setCacheHint(oldCacheHint); 
     } 
    } 

    @Override protected void interpolate(double d) { 
     timeline.playFrom(Duration.seconds(d)); 
     timeline.stop(); 
    } 

} 

這是MI控制器:

移動菜單左側(超自然)

LeftTransition leftTransition = new LeftTransition(); 
       leftTransition.OpenMenu(list1); 
       leftTransition.play(); 

在這裏,我希望把我的尺寸 「AnchorPane」。 (設置我的 「anchorpane」 的寬度)

/*ViewPaneTransition paneTransition = new ViewPaneTransition(); 
      paneTransition.CloseMenu(viewPane, width); 
      paneTransition.play();*/ 
+0

啊什麼?你不能這樣做嗎? 'changeWidth(最終窗格節點,雙寬度){'??你會得到'PrefWidthProperty' **或**維護你的節點並使用'node.prefWidth(-1);'使用雙活頁夾連續獲得你的寬度。 – Elltz

+0

屬性或方法「Pref Width屬性()」不存在。 –

+0

嗯,我猜即時高,然後:) .... [窗格擴展區域,和...](https://docs.oracle.com/javase/8/javafx/api/javafx/scene/layout/Region。 html#prefWidthProperty--) – Elltz

回答

1
public void changeWidth(final Pane/*Region*/ node, double width) {//its a Pane or Regions 
this.node = node; 
this.timeline = TimelineBuilder.create() 
    .keyFrames(
     new KeyFrame(Duration.millis(20),  
      new KeyValue( going here? , width, WEB_EASE) 
     ) 
    ) 
    .build(); 

setCycleDuration(Duration.seconds(5)); 
setDelay(Duration.seconds(0)); 

}

在這種情況下我的節點是 「AnchorPane」。

AnchorPane是一個子類,或者Pane,讓你的包裝或方法採取Pane或彼等各自之類

+0

節點我想在我的窗口中處理這個。這在我的父節點。 –

+0

我沒有得到你的評論,在這裏顯示你的所有好的,先生,老實說,如果你只是複製粘貼,並做了我所說的你會回來的謝謝你,但如果它作爲父母返回,你可以將它投給AnchorPane並將其放置你的方法@VipPunkJoshersDroopy – Elltz

+0

我嘗試在javafx中創建導航抽屜。 我想增加anchorpane的大小,paneTransition.Close Menu(view pane,width), @Elltz。 –

0

這是對Java 9.改變寬度和高度都工作示例(只是刪除高度線,如果你不需要它)

widthProperty只讀,所以你必須設置maxWidth或minWidth切換你需要的情況。 默認情況下,時間軸上的延遲時間爲0,不需要設置它,循環時間是根據關鍵幀持續時間計算的。

public void changeSize(final Pane pane, double width, double height) { 
    Duration cycleDuration = Duration.millis(500); 
    Timeline timeline = new Timeline(
      new KeyFrame(cycleDuration, 
        new KeyValue(pane.maxWidthProperty(),width,Interpolator.EASE_BOTH)), 
      new KeyFrame(cycleDuration, 
        new KeyValue(pane.maxHeightProperty(),height,Interpolator.EASE_BOTH)) 
      ); 

    timeline.play(); 
    timeline.setOnFinished(event->{ 
     /* insert code here if you need */ 
    }); 
}