Button A = new Button();
Button B = new Button();
Button C = new Button();
somePane.getChildren().add(A,B,C);
Run Code Online (Sandbox Code Playgroud)
现在,让我们走向遥远的未来.我有一个参考somePane,我有兴趣访问按钮B.
从技术上讲,人们可以做类似的事情
somePane.getChildren().get(1); // returns the second button
Run Code Online (Sandbox Code Playgroud)
但是,我对此并不满意,因为它似乎容易出错.
在我看来,拥有某种标签系统会非常有用.像这样:
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);
Run Code Online (Sandbox Code Playgroud)
然后你可以做到
somePane.getChildren().getByTag("B"); // returns the second button
Run Code Online (Sandbox Code Playgroud)
JavaFX有这样的东西吗?
你可能想知道:
B变成我班级的固定属性?
Button或Node类进行子类化并添加此功能?
立即想到两种方式:
使用该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 ;
}
Run Code Online (Sandbox Code Playgroud)
或者,使用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");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5846 次 |
| 最近记录: |