【发布时间】:2015-06-10 08:56:45
【问题描述】:
(重复并已解决 - 请参阅下面的答案)
我在 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");
【问题讨论】:
-
使用 FXML,您将在控制器中为您感兴趣的 UI 元素定义实例字段。在加载控制器类实例期间初始化的那些字段将包含对您希望使用的 GUI 对象的引用。
-
是的,这是我经常阅读的内容。但我看不出这种“编码风格”有什么优势。像这样编写的代码对我来说看起来很混乱.. :-/ 也许我错了,其他程序员会说这是结构良好,但我对使用 SceneBuilder 调用方法等不太满意..
-
lookup方法非常不稳定。查找仅在应用 CSS 后可用,这(通常)是在节点显示之后(有时是一帧之后)。使用控制器方法,或者在最坏的情况下使用FXMLLoader.getNamespace()。
标签: javafx