Как динамически удалять узлы в JavaFx

@FXML AnchorPane gamePane;

public void gameStart() {
    if (!Started) {
        board = new Board();
        stones = new Circle[8][8];
        newTurn();
        applyBoard();
        Started = true;
    }
    else {
        DestroyBoard(); // <--- Erase all the stones 
        board = new Board();
        stones = new Circle[8][8];
        newTurn();
        applyBoard();
    }
}

public void applyBoard() { 
    for(int i = 0; i < board.boardsize; i++) {
        for(int j = 0; j < board.boardsize; j++) {
            if (board.board[i][j] != board.EMPTY) {
                if (board.board[i][j] == board.BLACK) {
                    stones[i][j] = new Circle(155 + 90 * j, 85 + 90 * i, 40);
                    stones[i][j].setFill(Color.BLACK);
                    gamePane.getChildren().add(stones[i][j]);
                }
                else if (board.board[i][j] == board.WHITE) {
                    stones[i][j] = new Circle(155 + 90 * j, 85 + 90 * i, 40);
                    stones[i][j].setFill(Color.WHITE);
                    gamePane.getChildren().add(stones[i][j]);
                }
            }
        }
    }
}
public void DestroyBoard() { // <---Test Function and not worked!!
    gamePane.getChildren().remove(stones[3][3]);
}

Пытался сделать так, чтобы при повторном нажатии кнопки старт все камни на доске стирались и начиналась новая игра. В качестве первого шага я попытался стереть один базовый камень, но я не могу удалить ни одного камня на доске. Что мне делать, чтобы решить эту проблему?

Возможный дубликат JavaFX - Как удалить конкретный узел из AnchorPane

Pospolita Nikita 25.06.2018 18:13

Я почти уверен, что это работает, но поскольку вы создаете новый Board и добавляете круги на основе исходных данных в этом новом экземпляре, вы получаете доску с вдвое большим количеством кругов за вычетом того, который вы удалили. Я предполагаю, что код детерминирован, поэтому положение и внешний вид кругов остаются такими же, как и в предыдущей отображаемой версии, результат выглядит точно так же, как и раньше ...

fabian 25.06.2018 18:22

если я сделаю gamepane.getChildren (). clear в функции applyboard (), она работает, но где угодно, кроме этого, не работает

SunBathe 26.06.2018 17:03
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
1 664
1

Ответы 1

Камни хранятся в ObservableList в контейнере gamePane, доступ к которому вы получаете с помощью метода getChildren(). В списке есть очень полезный метод clear(), который удаляет все элементы в списке.

Поэтому, если вы просто хотите удалить все камни с gamePane, просто вызовите этот метод:

gamePane.getChildren().clear();

спасибо за комментарий. если я вызываю getChildren.clear () в функции appyboard (), это сработает, но если я вызываю это в функции destryboard (), камни все еще живы! какую ошибку я сделал?

SunBathe 26.06.2018 04:00

Вы снова вызываете applyBoard () сразу после DestroyBoard ()?

Zephyr 26.06.2018 04:22

Что ж, если вы удаляете все камни, но сразу добавляете их снова, вы не заметите, как они удаляются.

Zephyr 26.06.2018 16:53

Это верно, поэтому в качестве тестового примера я попытался удалить только камень, расположенный (3,3), и это тоже не удалось. Я могу удалять камни только в функции applyboard (), которая добавляет камни в gamepane.getChildren (). без этой функции нет доступа к камням

SunBathe 26.06.2018 18:36

Другие вопросы по теме