(重复并已解决 - 请参阅下面的答案)
我正在 JavaFX 中做我的第一步,似乎很难使用“SceneBuilder”。我习惯了 Android 和 QtCreator。在我看来,访问 UI 组件要容易得多。
类似 findViewById(R.id.btnPushMe);
<- 安卓代码
其实我得到了一个解决方案,但使用起来很不舒服。这看起来像这样:
FXMLLoader loader = new FXMLLoader(MainApp.class.getResource("../fmxl/main.fxml"));
AnchorPane pane = loader.load();
System.out.println("panechilds:" + pane.getChildren().size());
BorderPane border = (BorderPane) pane.getChildren().get(0);
System.out.println("borderchilds:" + border.getChildren().size());
xml..
<AnchorPane fx:id="mAnchor" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="800.0"
xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="app.progui.MainController">
<children>
<BorderPane layoutX="-1.0" prefHeight="600.0" prefWidth="800.0">
<top>
...
提前致谢
马丁
编辑:
这是一个重复的问题(但我不会删除它,因为我花了一些时间来找到答案——也许是因为 JavaFX 没有像 Android 问题那样被问到......)
AnchorPane anchor = (AnchorPane) scene.lookup("#mAnchor");
在这里找到:How to find an element with an ID in JavaFX?
最佳答案
您应该使用 controller class并访问那里的 UI 元素。
基本上你这样做:
<AnchorPane fx:id="mAnchor" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="800.0"
xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="app.progui.MainController">
<children>
<BorderPane fx:id="border" layoutX="-1.0" prefHeight="600.0" prefWidth="800.0">
<top>
...
然后您可以访问
fx:id
- Controller 中的属性元素package app.progui ;
// ...
public class MainController {
@FXML
private BorderPane border ;
public void initialize() {
border.setStyle("-fx-background-color: antiquewhite;");
// ...
}
// ...
}
Controller 类中的字段名称必须匹配
fx:id
FXML 文件中的值。可以访问
fx:id
- 调用 FXMLLoader
的类中的属性元素,但如果您需要这样做,通常表明您的整体设计是错误的。你可以做:FXMLLoader loader = new FXMLLoader(MainApp.class.getResource("../fmxl/main.fxml"));
AnchorPane pane = loader.load();
Map<String, Object> fxmlNamespace = loader.getNamespace();
BorderPane border = (BorderPane) fxmlNamespace.get("border");
假设
fx:id
在上面截取的 FXML 中定义。
关于javafx - 如何在 JavaFX 中从 SceneBuilder 访问 UI 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29463176/