是否可以在 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();
是否可以在 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:
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();