gpt4 book ai didi

java - 在 JavaFX 的节点的子列表中查找特定节点

转载 作者:行者123 更新时间:2023-12-04 00:24:25 28 4
gpt4 key购买 nike

    Button A = new Button();
Button B = new Button();
Button C = new Button();

somePane.getChildren().add(A,B,C);

现在,让我们去到遥远的 future 。我有一个对 somePane 的引用,我有兴趣访问按钮 B

从技术上讲,我们可以做类似的事情

    somePane.getChildren().get(1); // returns the second button

但是,我对此不太满意,因为它似乎很容易出错。

我突然想到拥有某种标签系统会非常有用。像这样:

    Button A = new Button();
Button B = new Button();
Button C = new Button();

A.tag = "A";
B.tag = "B";
C.tag = "C";

somePane.getChildren().add(A,B,C);

那你可以做

    somePane.getChildren().getByTag("B");  // returns the second button

JavaFX 有这样的东西吗?


你可能想知道:

  • 为什么我不直接将按钮 B 设为我的类的固定属性?
    • 这些按钮和 Pane 是动态创建的。我可以有多个 Pane ,每个 Pane 都有自己的“B”按钮。
  • 为什么我不继承 ButtonNode 类并添加此功能?
    • 有道理,我能做到。不过,我宁愿有一个更简单的解决方案。

最佳答案

立即想到两种方法:

使用 userData 属性:

Button a = new Button();
a.setUserData("A");
Button b = new Button();
b.setUserData("B");
Button c = new Button();
c.setUserData("C");
somePane.getChildren().addAll(a, b, c);

// ...

private Node getByUserData(Parent parent, Object data) {
for (Node n : parent.getChildren()) {
if (data.equals(n.getUserData())) {
return n ;
}
return null ;
}

或者,使用 CSS id 和 lookup() 方法。请注意,这仅在将 CSS 应用于节点后才有效,这实际上意味着它们必须是实时场景图的一部分。

Button a = new Button();
a.setId("A");
Button b = new Button();
b.setId("B");
Button c = new Button();
c.setId("C");
somePane.getChildren().addAll(a, b, c);

// ...

Button button = (Button) somePane.lookup("#B");

关于java - 在 JavaFX 的节点的子列表中查找特定节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24971666/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com