JavaFX - 控件数组

Man*_*eli 1 java arrays oop javafx javafx-2

我想创建一个JavaFX控制器数组,以便更容易使用它们,例如,您可以在GridPane中循环添加/设置元素.

但是,尽管编译器/ IDE没有显示任何错误,但下面的代码不起作用:

public GridPane drawPane(){
    GridPane grid = new GridPane();
    Button[] btn = new Button[10];
    grid.add(btn[0], 0,0);
    return grid;
}
Run Code Online (Sandbox Code Playgroud)

但是这个确实有效:

public GridPane drawPane(){
    GridPane grid = new GridPane();
    Button btn = new Button();
    grid.add(btn, 0,0);
    return grid;
}
Run Code Online (Sandbox Code Playgroud)

我是否错误地控制了控制器?为什么此代码不适用于数组?

Sim*_*ant 5

你的数组不包含任何对象,所以你会得到一个NullPointerException.使用初始化的Object填充数组以使其正常工作.

public GridPane drawPane(){
    GridPane grid = new GridPane();
    Button[] btn = new Button[10];
    btn[0] = new Button(); //add this line
    grid.add(btn[0], 0,0);
    return grid;
}
Run Code Online (Sandbox Code Playgroud)


Pat*_*ick 5

试试这个...它将创建一个按钮数组,如果你调用你的getGrid()方法,它会迭代这个按钮数组并将它们添加到GridPane.

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;

public class App extends Application {

    private Button[] btns = new Button[10];

    @Override
    public void start(Stage primaryStage) {

        initBtnsArray();
        Group root = new Group();

        root.getChildren().add(getGrid());
        Scene scene = new Scene(root, 800, 600);

        primaryStage.setTitle("Hello Controller-Array-World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

    private Pane getGrid() {
        int i = 0;
        GridPane gridPane = new GridPane();
        for(Button b : btns) {
            // do something with your button
            // maybe add an EventListener or something
            gridPane.add(b, i*(i+(int)b.getWidth()), 0);
            i++;
        }
        return gridPane;
    }

    private void initBtnsArray() {
        for(int i = 0; i < btns.length; i++) {
            btns[i] = new Button("Button-"+i);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

帕特里克