JavaFX中的对象数组

JavaFX中的对象数组,java,arrays,javafx,Java,Arrays,Javafx,我应该创建一个类型为Buttons的对象数组,但输出只是一个按钮,而不是应该的多个按钮。我该怎么办 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].setOnA

我应该创建一个类型为
Buttons
的对象数组,但输出只是一个按钮,而不是应该的多个按钮。我该怎么办

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();
}
int numberOfButtons=20;
对于(int i=0;i
当你遇到这样的问题时,最好的办法是拿一张纸和一支笔,写下你想要的东西 代码的每一行都是这样

您的完整代码在循环中。您应该缩小范围,使中仅包含以下内容:

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!");
    }
});
btn[i]=新建按钮();
btn[i].setText(“安全!”);
btn[i].setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
System.out.println(“你好,世界!”);
}
});
我使用JavaFx和Java8(流)来解决您的问题:

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

在创建
root
之前,您可能应该关闭for循环。您还应该在for循环之前移动
按钮[]btn=new按钮[numberOfButtons]
。否则,您将在for循环中创建每个变量20次。好的,我这样做了。。。但是接下来的方法是
root.getChildren().add(btn[i])不再工作了。所以添加另一个for循环,比如:
for(按钮b:btn){root.getChildren().add(b);}
。或者,您也可以在不使用for循环的情况下执行
root.getChildren().addAll(btn)