在节点中查找特定节点';JavaFX中的子列表
现在,让我们走向遥远的未来。我参考了在节点中查找特定节点';JavaFX中的子列表,java,javafx,Java,Javafx,现在,让我们走向遥远的未来。我参考了somePane,我对访问按钮B感兴趣 从技术上讲,我们可以这样做 Button A = new Button(); Button B = new Button(); Button C = new Button(); somePane.getChildren().add(A,B,C); 然而,我对此并不满意,因为它似乎容易出错 我突然想到,拥有某种标签系统是非常有用的。像这样: somePane.getChildre
somePane
,我对访问按钮B
感兴趣
从技术上讲,我们可以这样做
Button A = new Button();
Button B = new Button();
Button C = new Button();
somePane.getChildren().add(A,B,C);
然而,我对此并不满意,因为它似乎容易出错
我突然想到,拥有某种标签系统是非常有用的。像这样:
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);
JavaFX有类似的功能吗
你可能想知道:
- 为什么我不把按钮
作为类的固定属性呢?B
- 这些按钮和窗格是动态创建的。我可以有几个窗格,都有自己的“B”按钮
- 为什么我不将
或按钮
类划分为子类并添加此功能?节点
- 有道理,我能做到。不过,我宁愿有一个更简单的解决方案
userData
属性:
somePane.getChildren().getByTag("B"); // returns the second button
或者,使用CSS id和lookup()
方法。请注意,只有将CSS应用于节点后,这才会起作用,这实际上意味着它们必须是实时场景图的一部分
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 ;
}
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");