(重复并已解决 - 请参阅下面的答案)
我正在 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>
...
提前致谢
马丁
Edit:
这是一个重复的问题(但我不会删除它,因为我花了一些时间来找到答案 - 也许是因为 JavaFX 没有像 Android 问题那样多被问到......)
AnchorPane anchor = (AnchorPane) scene.lookup("#mAnchor");
在这里找到:如何在 JavaFX 中查找具有 ID 的元素? https://stackoverflow.com/questions/12201712/how-to-find-an-element-with-an-id-in-javafx
你应该使用控制器类 http://docs.oracle.com/javase/8/javafx/api/javafx/fxml/doc-files/introduction_to_fxml.html#controllers并访问那里的 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
- 控制器中的属性元素
package app.progui ;
// ...
public class MainController {
@FXML
private BorderPane border ;
public void initialize() {
border.setStyle("-fx-background-color: antiquewhite;");
// ...
}
// ...
}
控制器类中的字段名称必须与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 片段中定义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)