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)
我是否错误地控制了控制器?为什么此代码不适用于数组?
你的数组不包含任何对象,所以你会得到一个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)
试试这个...它将创建一个按钮数组,如果你调用你的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)
帕特里克