2017-05-18 2 views
-1

Ich habe mehrere Objekte von Bauern in meinem Spiel Dame. Ich möchte in der Lage sein, auf jedem von ihnen (Kreise) eine Handlung zu machen, ohne 24 unterschiedliche Aktionen für jeden Bauern zu machen. Hast du irgendwelche Ideen?Set auf Aktion für Bauern

+2

eine Schleife verwenden und speichern Sie die Kontrolleure in einem Array zu bekommen? –

+1

"ohne 24 verschiedene Aktionen für jeden Bauern". Warum nicht? Rufen Sie 'setOnAction' einfach in einer Schleife auf. –

Antwort

1

Mit der getChildren() -Methode alle Bauern im Elternknoten holen und in der Liste speichern, dann iterieren und setOnAction als unten stehenden Weg aufrufen.

List<Node> chieldNode = new ArrayList<>(); 
     chieldNode = parentNode.getChildren(); 
    for (Node node : chieldNode) { 
     if (node instanceof Button) { 
      ((Button) node).setOnAction(e -> { 
       System.out.println(((Button) node).getText()); 
      }); 
     } 
} 

Oder unten Beispiel verweisen einige Idee

public class DemoEx extends Application { 
     @Override 
     public void start(Stage primaryStage) throws Exception { 
       GridPane gridPane = new GridPane(); 
       Button[] button = new Button[100]; 
       for (int i = 0; i < 10; i++) { 
        for (int j = 0; j < 10; j++) { 
         button[j] = new Button(i + "" + j); 
         button[j].setPrefSize(50, 50); 
         gridPane.add(button[j], i, j); 
        } 
       } 

       List<Node> chieldNode = new ArrayList<>(); 
       chieldNode = gridPane.getChildren(); 
       for (Node node : chieldNode) { 
        if (node instanceof Button) { 
         ((Button) node).setOnAction(e -> { 
          System.out.println(((Button) node).getText()); 
         }); 
        } 
       } 

       Scene scene = new Scene(gridPane, gridPane.getMaxHeight(), gridPane.getMaxWidth()); 
       primaryStage.setScene(scene); 
       primaryStage.show(); 
      } 
     public static void main(String args[]) { 
      launch(args); 
     } 
    }