Button btn = new Button("ohot");
btn.setId("testId");
itemSection.getChildren().add(btn);
Node nds = itemSection.lookup("#testId");
上面的代码有什么问题?我得到nds = null它应该是btn
答案 0 :(得分:2)
与applyCSS一起查找
Lookups基于CSS。因此,CSS需要应用于场景,以便您能够在场景中查找项目。有关更多信息,请参阅applyCSS
文档。要从查找中获得准确的结果,您可能还需要调用layout,因为布局操作可以影响场景图属性。
所以你可以这样做:
Button btn = new Button("ohot");
btn.setId("testId");
itemSection.getChildren().add(btn);
itemSection.applyCss();
itemSection.layout();
Node nds = itemSection.lookup("#testId");
显示舞台后的替代查找
请注意,JavaFX中的某些操作(例如最初showing一个阶段或等待pulse发生)将隐式执行CSS应用程序,但大多数操作都不会。
所以你也可以这样做:
Button btn = new Button("ohot");
btn.setId("testId");
itemSection.getChildren().add(btn);
stage.setScene(new Scene(itemSection);
stage.show();
Node nds = itemSection.lookup("#testId");
基于CSS的查找VS显式引用
在代码中存储和使用显式引用通常比使用查找更受欢迎。与查找不同,使用显式引用是类型安全的,不依赖于CSS应用程序。通过使用带有@FXML注释的JavaFX和FXML进行类型安全引用注入,也可以促进生成显式引用。但是,查找和显式引用方法都有有效的用例,所以这只是在正确的时间使用正确方法的问题。