JavaFX - 使用其他类作为节点

问题描述 投票:0回答:1

我是 JavaFX 新手,很好奇是否可以将您自己的类的对象作为节点添加到主启动函数中的场景中?例如,我想在我的启动函数中创建一个根节点,然后向其添加一个按钮。是否可以实例化一个对象,在其构造函数中创建自己的按钮,然后将其添加到根节点,而不是在同一启动函数中创建按钮?这就是我的意思。我正在处理两个课程。主楼和酒吧。这是我的主要课程:

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 中的根对象中。如果我的栏对象现在是根对象的子对象之一,并且根对象在场景中使用,那么当我启动应用程序时,栏对象的构造函数中的按钮不应该显示吗?

从更大的范围来看,这通常是在 Javafx 中完成的吗?将所有内容放在单独的类中并保持主启动函数尽可能干净或者可以在该函数中实例化各种对象吗?非常感谢。

java javafx
1个回答
3
投票

您必须将按钮作为子按钮添加到

Bar
(实际上是
BorderPane
):

public class Bar extends BorderPane {
    public Bar()
    {
        Button btn = new Button("hey");
        setCenter(btn);
    }
}

构建较大的 UI 时通常有两种主要方法:

(1) 每个 UI 组件都是

Node
类型 的子类(例如您的情况中的
BorderPane
),并在其构造函数中构建用户界面。 UI 组件是 JavaFX 场景图的一部分。

  • 优点:使用简单 - 只需实例化您的类并将其作为任何子节点放入场景图中即可。
  • 缺点:所有UI都是在构造函数中创建的。控制器代码是 UI 的一部分。

(2) 每个 UI 组件都由一个类表示,该类不是 Node

 类型的子类。
相反,像 createUI(Pane parent)
 这样的方法会创建 UI 并将其放入场景图中。必须显式调用此方法。

示例:

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)

方法中:

Bar bar = new Bar(); bar.createUI(root);
当然,复杂的 UI 组件可能会在内部使用其他 UI 组件,并从其自己的 

createUI(...)

 方法调用它们的 
createUI(...)
 方法。

    优点:UI和控制器分离。用于构建 UI 的显式方法,因此可以在构建 UI 之前
  • 实例化并配置组件。 缺点:使用起来比较复杂。
© www.soinside.com 2019 - 2024. All rights reserved.