子类化JavaFX舞台/场景

最后发布: 2015-04-25 15:00:27


问题

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

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

javafx javafx-2
回答

您可以以几乎相同的方式将SceneStage以及许多其他FX库类作为子类。 我不确定我会推荐它,而且它似乎并不是官方教程中任何示例中出现的样式。 (实际上,我很久以前就停止在我的大多数Swing代码中使用JFrameJPanel子类,而在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);
    }
}