我有一个声明为类变量的按钮数组,这些按钮已添加到gridPane中。当我尝试从gridPane删除数组的按钮时,事件处理程序已被识别,但未删除节点。
关于如何实现此目标的任何想法?
for(int i = 0; i < Rows; i++) {
for(int j = 0; j < Cols; j++) {
bArray = new Button[Rows][Cols];
bArray[i][j] = new Button();
bArray[i][j].setMinSize(20,20);
bArray[i][j].setMaxSize(25,25);
gridBoard.setVgap(1); //vertical gap in pixels
gridBoard.add(bArray[i][j], j, i);
bArray[i][j].setOnMouseClicked(e->checkNeighbors());
}
}
//本地方法
public static void checkNeighbors() {
// This print out statement is met, but the removal does not occur
System.out.println("Action is called");
gridBoard.getChildren().remove(bArray[0][1]);
gridBoard.getChildren().remove(bArray[0][2]);
gridBoard.getChildren().remove(bArray[0][3]);
}
答案 0 :(得分:2)
您在每次迭代中都覆盖bArray
,并且for循环末尾剩下的唯一有效引用是从[Rows][0]
到[Rows][Cols]
。
例如,如果Rows = 4
和Cols = 4
,则最后只有唯一有效的引用是[3][0]
,[3][1]
,[3][2]
和{ {1}},而您正尝试删除[3][3]
,[0][1]
,[0][2]
。
您应在循环开始之前移动[0][3]
的初始化。
bArray