首页 > 解决方案 > 如果在构造函数中给定扩展类,JavaFX 扩展场景类会出现问题

问题描述

我正在尝试创建一个作为 JavaFX Scene 类的扩展的类。但是,我想为该类的用户提供选项,以提供他们自己现有的 Scene 对象,然后该对象将获得作为扩展类一部分的附加代码。

这是我想做的一个基本示例:

public class MyScene extends Scene {

  public MyScene(Parent root, double width, double height) {
    super(root,width,height);
  }

  public MyScene(Scene scene) {
    super(scene.getRoot(), scene.getWidth(), scene.getHeight());
    //This does not work because two Scene objects cannot exist with the same Parent.
  }
}

显然,上面的第二类构造函数是行不通的。

我也试过这样做:

Scene scene = new Scene(parent);
MyScene myScene = (MyScene) scene;

但是我收到一条错误消息,说我无法将场景投射到 MyScene 中。

有什么办法可以做我想做的事吗?而我尝试这样做的唯一原因 - 这基本上是为了方便使用 MyScene 类的人,让他们可以选择预先构建他们的场景,然后使用 MyScene 类中的附加功能......它对整个班级来说只是一个“很好的接触”。

那么有没有办法“转换”或以某种方式将现有场景设置为在类中扩展的对象?

我看了这个问题,但我真的不明白如何将建议的解决方案应用于这种情况,特别是因为 javafx.scene.Scene 没有默认构造函数,所以在任何 MyClass 构造函数中调用 super 成为强制性的。

标签: javajavafx

解决方案


根据我得到的反馈,看起来不可能做我想做的事,所以我决定重新构造这个类,让它看起来像这样:

public class MyScene {

  Scene scene;

  public MyScene(Parent parent, double width, double height) {
    this.scene = new Scene(parent, width, height);
  }

  public MyScene(Scene scene) {
    this.scene = scene;
  }

}

然后,当然,在需要对场景进行任何引用的地方,我只使用定义的场景对象。它让我可以提供我正在寻找的功能……虽然不理想,但它确实有效。


推荐阅读