2016-04-15 9 views
0

Zum Beispiel habe ich eine Klasse, in der ich eine Methode geschrieben habe, die ein Polyline-Objekt erstellt. Beachten Sie, wie ich solution.setTranslateY (315), die verschiebt die Polyline in meinem Javafx-Fenster.Gibt es eine Möglichkeit, etwas in einer Methode zu verschieben, ohne den Code der Methode explizit zu bearbeiten?

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

Wie Sie sehen können, habe ich auf einem erstellte Objekt dieses „getSolution()“ Methode implementieren, indem sie in einer Gruppe setzen und dann fügte hinzu, dass Gruppen in der Szene meines Programms.

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

Meine Frage ist: Gibt es eine Möglichkeit, so dass ich meine Linienzug nicht zu übersetzen Objekt in der ursprünglichen Methode habe ich? Wie kann ich es in meiner Startmethode nach unten verschieben? Wenn ich mehrere Objekte davon erstellen wollte und nicht immer wollte, dass es 315 war, fragte ich mich, wie ich es in meiner Startmethode ändern könnte, anstatt dass es eine konstante Verschiebung meiner Methode wäre.

Antwort

0

Eine Möglichkeit, die Anpassung einfacher zu machen, wäre das Herunterschalten als Argument für die Methode getSolution(). Dies oder, über der Gruppendeklaration, könnten Sie sagen

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

Dann ersetzt getSolution() mit Lösung in der Gruppendeklaration.

+0

Vielen Dank! Ich hatte noch nicht einmal darüber nachgedacht, dass meine getSolution-Methode ein Polyline-Objekt erstellt hat. Genau das habe ich gesucht. – brnn

0

vorgeschlagener Ansatz

Im Allgemeinen, wenn Sie die automatische Layout der Knoten in der Szene wollen, dann verwenden Sie eine layout pane, anstatt einen nicht verwalteten übergeordneten Knoten wie ein Group.

Zum Beispiel ein Bündel von Ihren Linienzug Herz-Lösungen in einer vertikalen Ausrichtung hinzufügen, könnten Sie eine VBox verwenden:

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

Neben einer Übersetzung im Vergleich zu Layout

translateX/Y sind in der Regel wird für Anpassungen an animierten Eigenschaften verwendet, um Dinge vorübergehend zu verschieben (z. B. über eine TranslateTransition). Verwenden Sie anstelle von translateX/Y Eigenschaften zum Auslegen Ihrer Knoten layoutX/Y Eigenschaften, die speziell für diesen Zweck sind. Beachten Sie auch, dass Layout-Fenster die LayoutX/Y-Werte für ihre untergeordneten Knoten automatisch als Teil des Layout-Pass für das Layout-Fenster aktualisieren (Sie müssen diese Werte also nicht explizit festlegen, wenn Sie ein entsprechendes Layout-Fenster verwenden).