java - 如果在构造函数中给定扩展类,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 成为强制性的。
解决方案
根据我得到的反馈,看起来不可能做我想做的事,所以我决定重新构造这个类,让它看起来像这样:
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;
}
}
然后,当然,在需要对场景进行任何引用的地方,我只使用定义的场景对象。它让我可以提供我正在寻找的功能……虽然不理想,但它确实有效。
推荐阅读
- javascript - 选择下拉菜单后如何更改img内容
- python - 如何监控 Python 事件循环的繁忙程度?
- javascript - querySelectorAll (list) 通过单击检索每个对象内的特定值
- c# - 为什么TextBox的插入符在输入后会跳到文本的开头?
- android - 如何突出显示书籍图像中的特定区域?
- r - R用映射函数的数据框名称替换列名
- c# - 如何使用 C# 连接到 Google Cloud Storage?
- c++ - 对象创建另一个实例而不是修改指向的实例
- xml - 如何用 xslt 实现 RSA-OAEP 算法
- powershell - 此 AD 清理脚本可以改进的地方