2016-04-15 2 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

Одним из способов, с помощью которого вы могли бы упростить настройку, было бы принять понижающую передачу как аргумент метода getSolution(). Это или, выше декларации группы, вы можете сказать

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

Затем замените getSolution() на решение в декларации группы.

+0

Большое вам спасибо! Я даже не думал о том, что мой метод getSolution создал объект Polyline. Это именно то, что я искал. – brnn

0

Предлагаемый подход

Вообще, если вы хотите, автоматическое расположение узлов в сцене, то вы используете layout pane, а не неуправляемого родительский узел такой как Group.

Например, чтобы добавить кучу ваших решений сердца полилинии в вертикальной ориентации, можно использовать 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 для своих дочерних узлов как часть прохода макета для панели макета (поэтому вам не нужно явно устанавливать эти значения при использовании соответствующей макетной панели).