2017-09-01 17 views
0

- 私をnodesを移動(私の場合はTextField)だけでなく、それらのサイズを変更する方法を探して。 (左から)広くなり、私はTextFieldがit'sだけ右側に幅(それがit'sは「スライド」のように見える変更したいのJavaFX - (例えばテキストフィールド)のサイズ変更および/またはノードを移動

public class Main extends Application{ 

private static final Pane pane = new Pane(); 

public void start(Stage stage) { 
    TextField txtField = new TextField(); 
    txtField.relocate(300, 0); 
    Button btnS = new Button("Change size"); 
    btnS.setPrefSize(100, 20); 
    btnS.relocate(0, 0); 
    btnS.setOnAction(e -> { 
     ScaleTransition transition = new ScaleTransition(Duration.millis(300), txtField); 
     transition.setByX(2); 
     transition.play(); 
    }); 

    Button btnP = new Button("Change Position"); 
    btnP.setPrefSize(100, 20); 
    btnP.relocate(110, 0); 
    btnP.setOnAction(e -> { 
     PathTransition transition = new PathTransition(); 
     transition.setNode(txtField); 
     transition.setPath(new Path(new MoveTo(300, 50))); 
     transition.play(); 
    }); 

    pane.getChildren().addAll(btnS, btnP, txtField); 
    Scene scene = new Scene(pane); 
    pane.setPrefSize(500, 100); 
    stage.setScene(scene); 
    stage.show(); 
} 

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

:以下

は、基本的な例です。権利)。私は私の試みが間違っていると思う、それは縮尺したくないので、 (それは TextFieldのスケーリングが働く)それをサイズ変更する。 ループを作成してサイズを変更する唯一の方法は、反復ごとに幅iに量iを追加することですか?

他のButtonTextFieldに移動します。今回は私の試みは正しかったと思うが、コードはうまくいかず、説明できない。

誰か助けてくれますか?ありがとうございました。

答えて

2

TextFieldの幅を変更する限りです。あなたがそれを使ってレイアウトを担当するスレッドをブロックしているので、ループは機能しません。表示幅はレイアウト中に親によって決定されるため、ノードのサイズを変更する方法は親に依存します。この場合、あなたは単にTimelineを使用してprefWidthプロパティをアニメーション化できます。

Timeline timeline = new Timeline(
     new KeyFrame(Duration.ZERO, new KeyValue(txtField.prefWidthProperty(), txtField.getWidth())), 
     new KeyFrame(Duration.millis(300), new KeyValue(txtField.prefWidthProperty(), 300))); 

timeline.play(); 

他のボタンがTextFieldを移動する必要があります。今回は私の試みが正しかったと思うが、コードはうまくいかず、説明できない。

使用するパスがどのように見えるかを見てください。単一のMoveTo要素しか使用しないため、何も描画されません。あなたのいずれかのパスを修正する必要があるか、私達ずっと簡単TranslateTransition

TranslateTransition transition = new TranslateTransition(Duration.millis(400), txtField); 
transition.setToY(50); 
transition.play(); 

注:あなたは繰り返しクリックの所望の効果を得るためにコードを調整する必要があります。

関連する問題