2016-04-15 3 views
0

たとえば、Polylineオブジェクトを作成するメソッドを記述したクラスがあります。どうすればいいですか?solution.setTranslateY(315)、javafxウィンドウでポリラインを下にシフトします。メソッドのコードを明示的に編集しなくても、メソッド内の何かを移動する方法はありますか?

public Polyline getSolution() 
{ 
    Polyline solution = new Polyline(); 
    solution.setStrokeWidth(3); 

    for (int i = 0; i < coordinates; i = i + 2) 
     solution.getPoints().addAll(puzzle[i], puzzle[i + 1]);  

    solution.setTranslateY(315); 

    //translates this solution farther down the display window 

    return solution; 
}  

あなたが見ることができるように、私はグループでそれを入れて、その後、私のプログラムのシーンにそのグループを追加することによって作成されたオブジェクト上でこの「getSolution()」メソッドを実装します。

public void start(Stage primaryStage) throws FileNotFoundException 
{ 
    Scanner input = new Scanner(System.in); 
    System.out.println("Enter the name of the input file: "); 
    String fileName = input.nextLine();       
    ConnectTheDotsPuzzle heart = new ConnectTheDotsPuzzle(fileName); 
    // When the user inputs the file, it gets sent to the constructor 

    Line blueLine = new Line(0, 300, 500, 300); 
    //line between puzzle and solution 
    blueLine.setStroke(Color.BLUE); 
    blueLine.setStrokeWidth(3); 

    Text solutionText = new Text(20, 335, "Solution:"); 
    solutionText.setFont(Font.font("Times", FontWeight.BOLD, 24)); 

    Group group = new Group(heart.getPuzzle(), heart.getSolution(), 
      blueLine, solutionText); 
    // grouping everything together to put in the scene 

    Scene scene = new Scene(group, 500, 
      300);          
    primaryStage.setTitle("Connect the Dots"); 
    primaryStage.setScene(scene); 
    primaryStage.show();   
    primaryStage.setOnCloseRequest(e -> System.exit(0)); 
} 

私の質問は:私は私が作成した最初の方法で私のポリラインオブジェクトを変換する必要がないようにする方法はありますか?私はどのように私の開始方法でそれをシフトすることができますか?私はこれを複数のオブジェクトにしたいと思っていて、いつもそれが315になることを望んでいないのであれば、私のメソッドで定数シフトにするのではなく、私の開始メソッドでどのように変更できるのだろうかと思っていました。

答えて

0

カスタマイズが簡単な方法の1つは、ダウンシフトをgetSolution()メソッドの引数として取り込むことです。それか、グループの宣言の上に、あなたはその後、グループ宣言の溶液でgetSolution()を置き換える

Polyline solution = heart.getSolution(); 
solution.setTranslateY(315); 

を言うことができます。一般

+0

ありがとうございました!私は、私のgetSolutionメソッドがPolylineオブジェクトを作成したという事実についても考えていませんでした。これはまさに私が探していたものです。 – brnn

0

推奨される方法

、あなたのシーン内のノードの自動レイアウトをしたい場合、あなたは、むしろ、そのようなGroupとして管理されていない親ノードよりも、layout paneを使用しています。例えば

、垂直方向にあなたのポリライン心臓ソリューションの束を追加するために、あなたはVBoxを使用することができますが:脇

VBox solutionsView = new VBox(10); 
for (int i = 0; i < 10; i++) { 
    solutionsView.getChildren().add(heart.getSolution()) 
} 

レイアウト

対翻訳移動X/Yは、一般的です(例えば、TranslateTransitionを介して)一時的に物を移動するためのアニメーションプロパティの調整に使用されます。ノードのレイアウトにプロパティーtranslateX/Yを使用する代わりに、その目的のために特に使用されるlayoutX/Yプロパティーを使用してください。また、内部的に、レイアウトペインはレイアウトペインのレイアウトパスの一部として子ノードのlayoutX/Y値を自動的に更新するので、適切なレイアウトペインを使用するときに明示的にそれらの値を設定する必要はありません。

関連する問題