JavaFx-删除存储在阵列中的节点

时间:2018-08-04 03:24:36

标签: java arrays javafx event-handling

我有一个声明为类变量的按钮数组,这些按钮已添加到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]);
    }

1 个答案:

答案 0 :(得分:2)

您在每次迭代中都覆盖bArray,并且for循环末尾剩下的唯一有效引用是从[Rows][0][Rows][Cols]

例如,如果Rows = 4Cols = 4,则最后只有唯一有效的引用是[3][0][3][1][3][2]和{ {1}},而您正尝试删除[3][3][0][1][0][2]

您应在循环开始之前移动[0][3]的初始化。

bArray