有没有办法在没有明确编辑方法代码的情况下在方法中移位?

时间:2016-04-15 21:27:55

标签: javafx polyline

例如,我有一个类,我在其中编写了一个创建Polyline对象的方法。请注意我如何使用 solution.setTranslateY(315),这会在我的javafx窗口中将Polyline向下移动。

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

我的问题是:有没有办法让我不必在我创建的初始方法中翻译我的Polyline对象?如何在启动方法中将其调低?如果我想创建多个这样的对象并且并不总是希望它是315,我想知道如何能够在我的start方法中更改它,而不是让它在我的方法中不断变换。 / p>

2 个答案:

答案 0 :(得分:0)

你可以更容易定制的一种方法是将降档作为getSolution()方法的参数。或者,在集团宣言之上,你可以说

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

然后用组声明中的解决方案替换getSolution()。

答案 1 :(得分:0)

建议的方法

通常,如果要在场景中自动布局节点,则使用layout pane而不是非托管父节点,例如Group

例如,要在垂直方向添加一堆Polyline心脏解决方案,您可以使用VBox

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

除了翻译与布局之外

translateX / Y通常用于调整动画属性以暂时移动内容(例如,通过TranslateTransition)。不使用translateX/Y属性来布置节点,而是使用layoutX/Y属性,这些属性专门用于此目的。另请注意,在内部,布局窗格将自动更新其子节点的layoutX / Y值,作为布局窗格布局布局的一部分(因此,在使用适当的布局窗格时,无需显式设置这些值)。