我是JavaFX的新手并且很想知道是否可以将自己的类的对象作为节点添加到主启动功能中的场景?例如,我想在我的start函数中创建一个根节点,然后添加一个Button。而不是在同一个启动函数中创建Button,是否可以实例化一个Object,它在其构造函数中创建自己的按钮,然后将其添加到根节点?这就是我的意思。我有两个班,我一起工作。主要和酒吧。这是我的主要课程:
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
Group root = new Group();
Bar open = new Bar();
root.getChildren().add(open);
Scene scene = new Scene(root, 1024,768, Color.BLACK);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
这是我的酒吧课程:
public class Bar extends BorderPane {
public Bar()
{
Button btn = new Button("hey");
}
}
当我启动应用程序时,会打开一个1024 X 768的黑盒子,但上面没有按钮。为什么?当我创建我的Bar对象(打开)时,它的默认构造函数创建一个Button。然后将该Bar对象作为其中一个子对象添加到main中的根对象中。如果我的bar对象现在是根对象的子对象之一,并且在Scene中使用了根对象,那么当我启动应用程序时,不应该出现Bar对象的构造函数中的按钮?
在更大范围内,这通常是在Javafx中完成的吗?将所有内容都放在一个单独的类中并尽可能保持主要启动函数的清洁或者可以在该函数中实例化各种对象吗?非常感谢。
答案 0 :(得分:2)
您必须将该按钮作为子项添加到Bar
(实际上是BorderPane
):
public class Bar extends BorderPane {
public Bar()
{
Button btn = new Button("hey");
setCenter(btn);
}
}
通常,在构建更大的UI时有两种主要方法:
(1)每个UI-Komponent都是Node
类型的子类(例如BorderPane
),并在其构造函数中构建用户界面。 UI-Komponent是JavaFX场景图的一部分。
(2)每个UI-Komponent都由一个不类Node
类的子类的类表示。相反,像{{}这样的方法1}}创建UI并将其放入场景图中。必须明确地调用此方法。
示例:
createUI(Pane parent)
在主要应用程序的public class Bar {
public void createUI(Pane parent) {
BorderPane pane = new BorderPane();
Button btn = new Button("hey");
pane.setCenter(btn);
parent.getChildren().add(pane);
}
}
方法中:
start(Stage)
当然,复杂的UI组件可能在内部使用其他UI组件,并从其自己的Bar bar = new Bar();
bar.createUI(root);
方法调用其createUI(...)
方法。