我对JavaFX和Java很新,但我遇到了一些奇怪的事情。起初,我参加了Java课程,然后我们使用SceneBuilder为应用程序创建布局。我已经完成了课程,我正在尝试自己编写一些简单的应用程序。但每当我在互联网上寻找解决问题的方法时,到处都会在代码中实现布局,这意味着:使用类似这样的东西:
Label secondLabel = new Label("I'm a Label on new Window");
StackPane secondaryLayout = new StackPane();
secondaryLayout.getChildren().add(secondLabel);
所以我的问题是:我应该如何创建布局?我应该坚持使用SceneBuilder还是用Java编写代码,因为显然每个人都这样做?
答案 0 :(得分:6)
使用这两种方法都有好处,如果不分析您尝试制作的场景,一般情况下哪一个更好?
GridPane
,无法按<fx:include>
标记向多个列插入多个节点。fx:id
,然后在不同的位置列出所有元素。Integer
添加到父级的子级列表中吗?您可以编写一个fxml来执行此操作而不会出现错误 - 直到您尝试加载它为止。 java编译器会立即抱怨类似的东西。您当然可以在控制器类中使用java代码,它允许您将fxml + java代码组合到某个级别。例如。可以在initialize()
方法中创建重复结构。
答案 1 :(得分:2)
场景构建器是惊人的,我不能推荐它。
当你使用fxml时,你的类变得更加清晰,你可以专注于进一步扩展容器/控件的功能。你仍然会使用javafx类,你的控制器可能会变得很大。很高兴知道如何构造布局的概念以及何时使用什么样的容器,所以当你刚开始学习基础知识时,在代码中实现你的布局,然后转向使用SceneBuilder和FXML。
在代码中实现更复杂的布局后,您可以将这些技能转换为其他语言/平台。
在某些情况下,您无法通过SceneBuilder执行您想要的操作,例如在运行时创建的一些动态布局,并且包含在单独的自定义组件/ fxml文件中会非常棘手和混乱。然后在代码中将其写下来,并在其上面加上复杂的逻辑。
答案 2 :(得分:1)
直接使用SceneBuilder / FXML实现它。 JavaFX旨在使用XML UI定义文件,而不是在Java代码中编写UI。这是一种像Android一样的分离。