JavaFX - 将其他类用作节点

时间:2015-05-18 21:38:56

标签: java javafx

我是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中完成的吗?将所有内容都放在一个单独的类中并尽可能保持主要启动函数的清洁或者可以在该函数中实例化各种对象吗?非常感谢。

1 个答案:

答案 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场景图的一部分。

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

(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(...)方法。

  • 优点:UI和控制器的分离。用于构建UI的显式方法,因此可以在构建UI之前对组件进行实例化和配置。
  • 缺点:使用起来比较复杂。