我正在设置游戏,我尝试了多种方法来尝试摆脱这些“转弯”仅需要一次的窗格。我需要一种反转在每个单元格中创建多个窗格的函数的方法。我已经尝试过了:
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函数时所有窗格都将被删除,但是没有任何变化。窗格仍在每个单元格中。
答案 0 :(得分:0)
List.remove(Object)
的工作方式如下:
如果使用equals
进行比较时,如果列表中存在与传递给方法的参数匹配的元素,则将其删除。
由于Pane
没有覆盖equals
方法,因此如果传递的元素是列表中的对象之一,则删除子列表的元素。自创建新的Pane
以来,removePane
不会更改子列表。
您需要使用其他方式(例如,
)删除GridPane
的子级
clear
method。如果有要保留的节点,这会删除所有的所有子节点,将不起作用。如果您知道要删除的子级的索引范围,则可以在a sublist上调用clear
。removeIf
method。这样,您就可以传递用于检查是否应删除元素或将其保留在列表中的Predicate
。removeAll(Collection)
/ retainAll(Collection)
方法传递要删除/保留的Collection
个孩子。这要求您在某些集合的代码中跟踪要删除/不删除的窗格。您可以例如使用addPane
方法将这些节点添加到集合中。从GridPane
的子列表中删除节点后,请确保更新此集合,除非以后需要它们,因为这可能导致内存泄漏。