我之前使用Swing,现在刚开始接触JavaFX,尝试对JavaFX的Stages和Scenes进行子类化。然而,很快就遇到了问题,比如我的子类场景的init方法在初始化时找不到。
所以我想知道:JavaFX的Stages和Scenes是否像在Swing中子类化JFrames和JPanels一样,或者这种做法被不鼓励?
Scene
、Stage
等进行子类化。我不确定是否建议这样做,也似乎没有在任何官方教程示例中出现过这种风格。(事实上,我早就停止在绝大多数swing代码中使用JFrame
和JPanel
的子类,而更喜欢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);
}
}
JFrame
和 JPanel
的子类了。继承 Stage
和 Scene
会对程序产生负面影响吗?谢谢。 - olimpiabakugetChildren().add(...)
、setScene(...)
等方法。 - James_D
JFrame
和JPanel
的子类化了。大多数情况下,您只需实例化标准类并调用方法即可;我更喜欢这种方法。话虽如此,如果您想要,完全可以子类化Stage
和Scene
并使用该方法。(唯一的例外可能是由JavaFX框架传递给启动方法Application.start()
的初始Stage
;如果您愿意,可以忽略它。)您指的是哪个init()
方法?Scene
没有定义init()
方法。您能贴出一些代码吗? - James_DScene
进行子类化。请参考示例。 - James_D