当前位置: 首页 > 知识库问答 >
问题:

在JavaFX GridPane中替换(row, coll)处的节点

常嘉平
2023-03-14

我正在制作一个基于虫子“感知”和吃食物的网格风格游戏/模拟。我正在使用标签的gridPane(称为world Grid)来显示虫子和食物的网格。当虫子将细胞移向食物等时,这显然会不断更新。

我目前有一个函数updateGrid(int ol, int row, String cell Content),我想用在cell Content中具有新文本的标签替换[row, ol]处的标签。

我有一个有效的方法

worldGrid.add(new Label(cellContent), row,col);

然而,我担心这仅仅是在当前标签上添加了一个标签,显然超过100次的模拟迭代并不理想。

在添加标签之前,我已经尝试过了:

worldGrid.getChildren().remove(row,col);

然而,当我尝试执行添加行时,我会得到一个IllegalArgumentException

对此有什么想法吗?或者更好的是,关于如何最好地显示一个不断变化的网格,最终使用精灵代替文本,有什么想法吗?

共有3个答案

聂涛
2023-03-14

您直接调用getUNICEF()。删除()方法将导致gridpane与约束不同步。当您添加时,它还会为节点设置约束。添加clearConstraint()方法。

翟嘉志
2023-03-14

我同意Jens Peter的观点,但我想补充一点,您可以使用GridPane的getColumnIndex和getRowIndex来获取特定节点的位置。

例如(这是在扩展GridPane的组件中):

// set the appropriate label
for (Node node : getChildren()) {
    if (node instanceof Label
     && getColumnIndex(node) == column
     && getRowIndex(node) == row) {
        ((Label)node).setTooltip(new Tooltip(tooltip));
    }
}

换句话说,遍历GridPane中的所有节点,检查所需条件是否匹配,在本例中为行和列。

刘辰钊
2023-03-14

由grid.add(node, coll, row)(ATTENTION第一个来的coll!)提供的coll/row只是一个布局约束。这不提供任何方法来访问二维数组中的列或行,例如插槽。因此要替换节点,您必须知道它的对象本身,例如将它们记住在单独的数组中。

然后您可以调用getChildren().remove(object)…例如:

GridPane grid = new GridPane();

Label first = new Label("first");
Label second = new Label("second");

grid.add(first,  1,  1);
grid.add(second,  2,  2);
second.setOnMouseClicked(e -> {
    grid.getChildren().remove(second);
    grid.add(new Label("last"), 2, 2);
});
box.getChildren().addAll(grid);
 类似资料:
  • 当我使用DF的列名作为参数时,与使用和有什么根本区别? 哪一个是省时的,每一个的确切含义是什么?当我通过一些例子时,请有人详细解释一下,但这是令人困惑的。

  • 在本章中,我们将学习XML DOM对象中的替换节点操作。DOM中的所有内容都保存在分层信息单元中,替换节点提供了另一种更新这些指定节点或文本节点的方法。 以下是替换节点的两个方法 - 1. replaceChild()方法 方法用新节点替换指定的节点。 语法 具有以下语法 - 其中, - 是放入子列表的新节点。 - 是列表中要替换的节点。 此方法返回已替换的节点。 示例 以下示例(replacen

  • 我正试图按照Eclipseand JBoss工具在Wildfly中调试应用程序中的描述,在调试模式下运行我的应用程序--调试外部启动的Wildfly,但是,当我执行./standalone.sh--debug--server-config=standalone.xml命令时,我得到以下错误: user@user:~/wildfly-8.1.0.cr1/bin$./standalone.sh--de

  • 我有一堆XML文档,其中包含我需要用假数据替换的个人信息。Person节点包含以下元素: UUID-必填项,不应触及。 名字-可选 LastName-可选 地址-可选 个人身份-必需 一个人可能会出现很多次,在这种情况下应该使用相同的假数据,即如果两个person节点具有相同的personID,那么它们都应该接收到相同的假ID。 我已经实现了一些Java代码,这些代码从XML字符串构建一个DOM树

  • 问题内容: 如果您有两个不相交的图,并且想要链接它们,请执行以下操作: 到这个: 有没有办法做到这一点?在某些情况下,这似乎可以使施工更容易。 例如,如果您有一个图,其输入图像为,并且想要优化输入图像(深梦风格),是否有一种方法可以仅用节点替换占位符?还是在构建图形之前必须考虑一下? 问题答案: TL; DR:如果可以将这两个计算定义为Python函数,则应该这样做。如果不能,那么TensorFl

  • 我试图找出鼠标在哪里,就GridPane的列和行而言。我知道鼠标的位置,所以如果我知道每个单元格的宽度和高度(我认为这不是一个简单的方法来计算),我大概可以从中算出它,但是我看到的大多数代码似乎都假设鼠标在一个节点上GridPane内部: 但是实际上我的GridPane里面没有任何东西,所以我只得到整个GridPane。现在,我想我可以为每个单元添加节点,但这似乎效率低下。(这个想法是用户将节点放