我正在设置一个游戏,我已经尝试了许多方法来尝试摆脱这些窗格,这些窗格只需要每“转”一次。我需要一种方法来逆转在每个单元格中创建多个窗格的函数。我试过了:
for (int i = 0 ; i < numCols ; i++) {
for (int j = 0; j < numRows; j++) {
addPane(i, j);
}
}
}
private void addPane(int colIndex, int rowIndex) {
Pane pane = new Pane();
pane.setOnMouseEntered(e -> {
System.out.printf("Mouse enetered cell [%d, %d]%n", colIndex, rowIndex);
});
grid.add(pane, colIndex, rowIndex);
}
private void removePane(int colIndex, int rowIndex) {
Pane pane2 = new Pane();
pane.getChildren().remove(pane2);
}
for (int i = 0 ; i < numCols ; i++) {
for (int j = 0; j < numRows; j++) {
removePane(i, j);
}
}
}
我希望在使用removePane函数时,所有窗格都会被删除,但没有任何变化。窗格仍然在每个单元格中。
发布于 2019-06-10 09:27:41
List.remove(Object)
的工作原理是这样的:
如果在使用equals
进行比较时,列表中存在与传递给方法的参数匹配的元素,则会删除该元素。
由于Pane
不覆盖equals
方法,因此如果传递的元素是列表中的一个对象,则删除子列表中的一个元素。因为您创建了一个新的子列表,所以removePane
会保持Pane
列表不变。
您需要使用其他方法删除GridPane
的子项,例如
使用子列表的the clear
method的
removeIf
method上调用clear
。这允许你传递一个Predicate
,用于检查一个元素是否应该被移除或保留在列表中。removeAll(Collection)
方法传递你想要移除/保留的子元素的Collection
。这需要你跟踪你的代码中想要移除/不移除的窗格。例如,您可以将这些节点添加到addPane
方法中的集合中。确保在从子节点列表中删除节点后更新此集合,除非以后需要它们,因为这是内存leak.的潜在来源
https://stackoverflow.com/questions/56519241
复制相似问题