2016-10-28 7 views
-2

タイプButtonsのオブジェクトの配列を作成することになっていますが、出力は想定されているように倍数ではない単なる出力です。私は何をすべきか?あなたはこのような問題に実行する場合JavaFX内のオブジェクトの配列

int numberOfButtons = 20; 

for (int i = 0; i < numberOfButtons; ++i) {  
    Button[] btn = new Button[numberOfButtons]; 
    btn[i] = new Button(); 
    btn[i].setText("Safe!"); 

    btn[i].setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent event) { 
      System.out.println("Hello World!"); 
     } 
    }); 

    FlowPane root = new FlowPane(); 
    root.getChildren().addAll(btn[i]); 

    Scene scene = new Scene(root, 300, 250); 
    primaryStage.setTitle("Button Blast!"); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 
+1

あなたはおそらくあなたがループのためにあなたが作成する前に閉じる必要があることだけで、これが含まれているので、あなたはそれを絞り込む必要があります'ルート'。 forループの前に 'Button [] btn = new Button [numberOfButtons]'も移動する必要があります。それ以外の場合は、forループ内のすべての変数を20回作成しています。 –

+0

さて、私はそれをしました...しかし、その後、 'root.getChildren()。add(btn [i]);'メソッドはもう動作しません。 –

+0

次のように、forループを追加します: 'for(Button b:btn){root.getChildren()。add(b); } '。あるいは、おそらく単に 'root.getChildren()。addAll(btn)'をforループなしで行うことができます。 –

答えて

1

は最高のものは、紙とペンを得るために、あなたのコードの 各行が何をするか書き留めています。

完全なコードがループ内にあります。

btn[i] = new Button(); 
btn[i].setText("Safe!"); 

btn[i].setOnAction(new EventHandler<ActionEvent>() { 
    @Override 
    public void handle(ActionEvent event) { 
     System.out.println("Hello World!"); 
    } 
}); 
0

私はあなたの問題を解決するために、Java8(ストリーム)でのJavaFXを使用:

FlowPane fPane = IntStream.range(1, 20) 
      .mapToObj(value -> { 

       Button button = new Button("Safe!"); 

       button.setOnAction(event -> { 
        System.out.println("Hello World!"); 
       }); 

       return button; 

      }).reduce(new FlowPane(), (p, b) -> { 

       p.getChildren().add(b); 

       return p; 
      }, (flowPane, flowPane2) -> flowPane2); 

    Scene scene = new Scene(fPane, 300, 250); 

    primaryStage.setTitle("Button Blast!"); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
関連する問題