我有以下方法:
CreateStrip createStrip = new CreateStrip(input);
depBox.getChildren().add(createStrip.getStripGrid());
depBox是一个VBox,而.getStripGrid()返回一个GridPane。 CreateStrip也有这个方法:
public String getNameStrip() { return input.getNameStrip();}
在程序生活期间,depBox获得了许多GridPane,每个都有一个不同的NameStrip。
有时我需要从depBox中删除与.getNameStrip()匹配的特定GridPane。
我试过了:
for (Node node: depBox.getChildren()) {
//TODO REMOVE GRIDPANE CONTAIN THE NAME THAT MATCH WITH THE MESSAGE RECEIVED..
}
但我不知道如何设置匹配控件。
答案 0 :(得分:1)
将数据附加到GridPane
,以便您识别要删除的数据。
您可以使用Node.setUserData
或使用properties
Map
(我将在以下代码段中执行此操作)来执行此操作。
创建GridPane
GridPane gp = createStrip.getStripGrid();
gp.getProperties().put(NAME_KEY, createStrip);
depBox.getChildren().add(gp);
// use object not equal to any other object as key (i.e. equals uses reference equality)
static final Object NAME_KEY = new Object();
使用该信息删除相应的GridPane
。 searchName
是String
,用于标识您要删除的GridPane
(以检查与getNameStrip()
的相等性):
depBox.getChildren().removeIf(c -> {
CreateStrip strip = (CreateStrip) c.getProperties().get(NAME_KEY);
return strip != null && searchName.equals(strip.getNameStrip());
});
根据您的CreateStrip
类,可能没有必要将其实例添加为属性。它可能不是正确的做法,如果它是一个工厂,但我认为你得到了这个想法。
您还可以为id
的{{1}}属性分配值,并使用这些值来使用Node
标识正确的节点。但是,这些必须是唯一的并且是有效的css ID,但您可以使用Node.lookup
从消息映射到Map
。