JavaFx场景查找返回null

时间:2016-01-18 18:34:55

标签: javafx javafx-8 fxml

Button btn = new Button("ohot");
btn.setId("testId");
itemSection.getChildren().add(btn);
Node nds = itemSection.lookup("‪#‎testId‬");

上面的代码有什么问题?我得到nds = null它应该是btn

1 个答案:

答案 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进行类型安全引用注入,也可以促进生成显式引用。但是,查找和显式引用方法都有有效的用例,所以这只是在正确的时间使用正确方法的问题。