子类化 JavaFX 舞台/场景

Subclassing JavaFX Stage / Scene

来自 Swing 并且是 JavaFX 的新手,我尝试子类化 Java FX 舞台和场景。但是我很快 运行 遇到了问题,比如在初始化期间没有找到不属于我的子类场景的 init 方法。

所以我想知道:Java FX Stages 和 Sceens 是否要像在 Swing 中子类化 JFrames 和 JPanels 一样进行子类化,还是不鼓励这样做?

您可以以几乎相同的方式对 SceneStage 以及许多其他 FX 库 类 进行子类化。我不确定我是否会推荐它,而且官方教程的任何示例中似乎都没有出现这种风格。 (事实上​​ ,我很久以前就停止在我的绝大多数 swing 代码中使用 JFrameJPanel 的 sub类,而是更喜欢 FX 示例中的样式。)

但这当然是可能的:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class SubclassingExample extends Application {

    @Override
    public void start(Stage defaultStageIgnored) {
        Stage stage = new MyStage();
        stage.show();
    }

    public static class MyStackPane extends StackPane{
        public MyStackPane() {
            getChildren().add(new Label("Hello World"));
        }
    }

    public static class MyScene extends Scene {
        public MyScene() {
            super(new MyStackPane(), 250, 75);
        }
    }

    public static class MyStage extends Stage {
        public MyStage() {
            setScene(new MyScene());
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}