javafx从VBox中删除特定节点
我有以下方法:javafx从VBox中删除特定节点,javafx,Javafx,我有以下方法: CreateStrip createStrip = new CreateStrip(input); depBox.getChildren().add(createStrip.getStripGrid()); depBox是一个VBox。getStripGrid()返回一个GridPane。 CreateStrip也有此方法: public String getNameStrip() { return input.getNameStrip();} 在程序的生命周期中,depBo
CreateStrip createStrip = new CreateStrip(input);
depBox.getChildren().add(createStrip.getStripGrid());
depBox是一个VBox。getStripGrid()返回一个GridPane。
CreateStrip也有此方法:
public String getNameStrip() { return input.getNameStrip();}
在程序的生命周期中,depBox会获得许多GridPane,每个GridPane都有不同的名称。
有时我需要从depBox中删除与.getNameStrip()匹配的特定GridPane。
我试过:
for (Node node: depBox.getChildren()) {
//TODO REMOVE GRIDPANE CONTAIN THE NAME THAT MATCH WITH THE MESSAGE RECEIVED..
}
但我不知道如何设置匹配控件。步骤1:
将数据附加到允许您识别要删除的数据的网格窗格
您可以通过使用或(我将在下面的代码段中执行)来实现这一点
创建网格窗格
GridPane gp = createStrip.getStripGrid();
gp.getProperties().put(NAME_KEY, createStrip);
depBox.getChildren().add(gp);
步骤2:
使用这些信息删除相应的网格窗格
searchName
是标识要删除的GridPane
的字符串(用于检查与getNameStrip()
是否相等):
根据您的CreateStrip
类,可能不需要将其实例添加为属性。如果这是一家工厂,这甚至可能不是一件正确的事情,但我认为你得到了这个想法
可供替代的
您还可以为节点的id
属性指定一个值,并使用这些值使用节点查找来识别正确的节点。然而,这些需要是唯一的并且是有效的css id,但是您可以使用映射
从消息映射到id
我如何将我的名称_键定义为静态最终对象名称_键=新对象()?我收到一个字符串,所以我的例子中的对象应该是静态的最终对象“String”=new object()…但我不能这样做。还有一件事,searchName.equals它意味着什么?@Daniele_r81:NAME_KEY
是GridPane
s的属性映射的键searchName
只是要搜索的字符串的占位符。等于
是什么意思?请看这里:真的很抱歉,但我之前没有收到……我会尽快尝试,并给你我的反馈。谢谢。是的,很有效……非常感谢。我可以使用此方法更新gridPane中的某些文件吗?
// use object not equal to any other object as key (i.e. equals uses reference equality)
static final Object NAME_KEY = new Object();
depBox.getChildren().removeIf(c -> {
CreateStrip strip = (CreateStrip) c.getProperties().get(NAME_KEY);
return strip != null && searchName.equals(strip.getNameStrip());
});