Button A = new Button();
Button B = new Button();
Button C = new Button();
somePane.getChildren().add(A,B,C);
现在,让我们走向遥远的未来。我引用了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
作为我班级的固定财产?
Button
或Node
类进行子类化并添加此功能?
答案 0 :(得分:5)
立即想到两种方式:
使用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");