【问题标题】:How to dynamically remove nodes in JavaFx如何在 JavaFx 中动态删除节点
【发布时间】:2018-12-04 06:44:27
【问题描述】:
@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]);
}

我试着让如果再次按下开始按钮,那么船上的所有石头都会被清除并开始新的游戏。作为第一步,我尝试擦除一个基本的石头,但我无法删除板上的任何石头。我应该怎么做才能解决这个问题?

【问题讨论】:

  • 我很确定它确实有效,但是由于您创建了一个新的Board 并根据这个新实例中的初始数据添加了圆圈,所以您会得到一个圆圈的两倍减去你删除的那个。我猜代码是确定性的,所以圆圈的位置和外观与之前显示的版本相同,结果看起来与以前完全相同......
  • 如果我在 applyboard() 函数中执行 gamepane.getChildren().clear 它可以工作,但除此之外的任何地方都不起作用

标签: java javafx othello


【解决方案1】:

宝石存储在gamePane 容器内的ObservableList 中,您可以使用getChildren() 方法访问该容器。该列表有一个非常有用的clear() 方法,可以删除列表中的所有项目。

因此,如果您只是想从gamePane 中移除所有石头,只需调用此方法:

gamePane.getChildren().clear();

【讨论】:

  • 感谢您的评论。如果我在 appyboard() 函数中调用 getChildren.clear(),它会起作用,但如果我在 destryboard() 函数中调用它,石头还活着!我做错了什么?
  • 你会在 DestroyBoard() 之后再次调用 applyBoard() 吗?
  • 好吧,如果你删除了所有的石头,但马上又把它们全部加回来,你不会注意到它们被删除了。
  • 没错,所以作为一个测试用例,我试图只移除一个 (3,3) 定位的石头,但那也失败了。我只能在 applyboard() 函数中删除石头,该函数在 gamepane.getChildren() 中添加石头。没有这个功能,就无法访​​问石头
猜你喜欢
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 2014-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多