【问题标题】:JavaFX - Using Other Classes As NodesJavaFX - 使用其他类作为节点
【发布时间】:2015-07-30 13:12:12
【问题描述】:

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

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

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

【问题讨论】:

    标签: java javafx


    【解决方案1】:

    您必须将按钮作为子级添加到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 场景图的一部分。

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

    (2) 每个 UI-Komponent 都由一个类表示,该类不是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 之前实例化和配置组件
    • 缺点:使用起来比较复杂。

    【讨论】:

    • 哇,谢谢。那这是一个普遍的规则吗?如果你想在你的主启动函数中添加不同类的对象作为节点,这些类中包含的对象必须先添加为类的子类?
    • 它的行为方式与其他任何东西相同。如果您希望 Button 出现在场景图中,请将其添加到某个父节点的子列表中(并且该节点被添加为某个其他父节点的子节点等,一直到Scene)。 Parent 节点是来自标准 JavaFX 库还是您自己的类之一并不重要。
    • 这太棒了!非常感谢您的回复,我很感激。
    猜你喜欢
    • 1970-01-01
    • 2021-09-28
    • 2016-11-01
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    相关资源
    最近更新 更多