是否可以在 javafx 的 VBox 中找到特定的超链接?

IS it possible to find specific Hyperlink within VBox in javafx?

是否可以在 VBox 容器中找到特定的 Hyperlink?

假设我有代码动态地将 hyperlinks 添加到 VBox 元素中,但我不想添加相同的 link 两次,最简单的方法有什么想法吗?

我想到的是搜索并查看 Hyperlink 是否已经在 VBox 中,方法如下:

myContainer.getChildren().forEach(node -> {
    if(node.getClass().getSimpleName().equals("Hyperlink") {
          Node n = node.getClass();
          // Do my stuff
    } 
});

您的代码比较 class 名称(没有包),因此您无法通过这种方式区分各种超链接。 您可以为每个 Hyperlink 分配一个基于 URL:

的 ID
String url = ...
String urlToID = String.valueOf(url.hashCode());
...
// check if that urlToID is already present
boolean present = false;
for (Node child : myContainer.getChildren()) {
  if (child.getId().equals(urlToID)) {
    present = true;
    break;
}
if (!present) {
  Hyperlink link = ...
  link.setId(urlToID);
  myContainer.getChildren().add(link);
}

for 循环可以使用流进一步优化,但我认为这更具可读性:

boolean present = myContainer.getChildren().stream().filter(node -> 
                      return node.getId().equals(urlToId);)
                  .findFirst().isPresent();