Replace a node at (row,col) in a JavaFX GridPane(替换 JavaFX GridPane 中 (row,col) 处的节点)
问题描述
我正在制作一个基于错误感知"和进食的网格式游戏/模拟.我正在使用标签的 gridPane(称为 worldGrid
)来显示错误和食物的网格.当错误将细胞移向食物等时,这显然会不断更新.
I am making a grid-style game/simulation based on bugs "sensing" and eating food. I am using a gridPane (called worldGrid
) of labels to show the grid of bugs and food. This is obviously going to be constantly updated when a bug moves cells towards food etc.
我目前有一个函数updateGrid(int col, int row, String cellContent)
,我想用在cellContent 中包含新文本的标签替换[row,col] 处的标签.
I currently have a function updateGrid(int col, int row, String cellContent)
which I want to replace the label at [row,col] with a label that has the new text in cellContent.
我有以下工作
worldGrid.add(new Label(cellContent), row,col);
但是我担心这只是在当前标签之上添加一个标签,显然超过 100 次模拟迭代并不理想.
however im worried that that is just adding a label on top of the current label and obviously over 100 iterations of the simulation thats not ideal.
在添加标签之前我已经尝试过:
I have tried this before adding the label:
worldGrid.getChildren().remove(row,col);
但是,当我尝试执行 add
行时,我得到了一个 IllegalArgumentException
.
However I then get an IllegalArgumentException
when trying to do the add
line.
关于如何做到这一点的任何想法?或者更好的是,关于如何最好地显示最终将使用精灵而不是文本的不断变化的网格的任何想法?
Any ideas on how to do this? Or even better, any ideas on how best to show a constantly changing grid that will eventually use sprites instead of text?
推荐答案
grid.add(node, col, row) 提供的col/row(注意先来col!)只是一个布局约束.这不提供任何访问列或行的方法,如二维数组中的插槽.所以要替换一个节点,你必须知道它的对象本身,例如在单独的数组中记住它们.
The col/row provided by grid.add(node, col, row) (ATTENTION first comes col!) is only a layout constraint. This does not provide any means to access columns or rows like slots in a 2-dimensional array. So to replace a node, you have to know its object itself, e.g. remember them in a separate array.
然后你就可以调用 getChildren().remove(object)... 例如:
Then you are able to call getChildren().remove(object)... e.g.:
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);
这篇关于替换 JavaFX GridPane 中 (row,col) 处的节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:替换 JavaFX GridPane 中 (row,col) 处的节点
基础教程推荐
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01
- 降序排序:Java Map 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- Java:带有char数组的println给出乱码 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01