[英]JavaFX - Array of Controls
我想創建一個JavaFX控制器數組,以便更輕松地使用它們,例如,您可以在GridPane中循環添加/設置元素。
但是,盡管編譯器/ IDE未顯示任何錯誤,但以下代碼無法正常工作:
public GridPane drawPane(){
GridPane grid = new GridPane();
Button[] btn = new Button[10];
grid.add(btn[0], 0,0);
return grid;
}
然而,這確實工作 :
public GridPane drawPane(){
GridPane grid = new GridPane();
Button btn = new Button();
grid.add(btn, 0,0);
return grid;
}
我安裝控制器錯誤嗎? 為什么此代碼不適用於數組?
您的數組不包含任何對象,因此您將獲得NullPointerException
。 用初始化的對象填充數組以使其正常工作。
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;
}
嘗試一下...它將創建一個按鈕數組,如果您調用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);
}
}
}
帕特里克
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.