子类化 JavaFX 舞台/场景
Subclassing JavaFX Stage / Scene
来自 Swing 并且是 JavaFX 的新手,我尝试子类化 Java FX 舞台和场景。但是我很快 运行 遇到了问题,比如在初始化期间没有找到不属于我的子类场景的 init 方法。
所以我想知道:Java FX Stages 和 Sceens 是否要像在 Swing 中子类化 JFrames 和 JPanels 一样进行子类化,还是不鼓励这样做?
您可以以几乎相同的方式对 Scene
和 Stage
以及许多其他 FX 库 类 进行子类化。我不确定我是否会推荐它,而且官方教程的任何示例中似乎都没有出现这种风格。 (事实上 ,我很久以前就停止在我的绝大多数 swing 代码中使用 JFrame
和 JPanel
的 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);
}
}
来自 Swing 并且是 JavaFX 的新手,我尝试子类化 Java FX 舞台和场景。但是我很快 运行 遇到了问题,比如在初始化期间没有找到不属于我的子类场景的 init 方法。
所以我想知道:Java FX Stages 和 Sceens 是否要像在 Swing 中子类化 JFrames 和 JPanels 一样进行子类化,还是不鼓励这样做?
您可以以几乎相同的方式对 Scene
和 Stage
以及许多其他 FX 库 类 进行子类化。我不确定我是否会推荐它,而且官方教程的任何示例中似乎都没有出现这种风格。 (事实上 ,我很久以前就停止在我的绝大多数 swing 代码中使用 JFrame
和 JPanel
的 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);
}
}