gpt4 book ai didi

java - 如何在 JavaFX 中扩展 GridPane 以覆盖 add() 会导致 NPE、场景生成器中断

转载 作者:太空宇宙 更新时间:2023-11-04 09:45:45 25 4
gpt4 key购买 nike

似乎是一个很少被问到的问题,所以扩展 GridPane 可能是完全错误的方法。我确实看过How to extend custom JavaFX components that use FXML等等。

我正在尝试创建一个扩展 GridPane 的 LawnGrid 类,原因是重写 add() 方法以在添加 ImageView 节点时调整其大小。我还需要根据计算 LawnGrid 的大小并确定草坪是否宽于高来调整大小,以保持纵横比。我省略了看似无关紧要的实现细节。

问题是,当我将 LawnGrid 放入 .fxml 文件中时,它不会在 SceneBuilder(在 IntelliJ 中)中显示,我认为这是我做错了什么的症状。我收到此错误:

java.lang.NullPointerException / javafx.fxml.LoadException:

指向我的view.fxml:...(在 BorderPane 内)

<center>
<LawnGrid fx:id="lawnGridPane" style=" -fx-border-color:green; -fx-border-width: 10; -fx-border-style: solid;" BorderPane.alignment="CENTER">

</LawnGrid>
</center>

我想以编程方式添加约束,也许我需要预先添加它们,但似乎我会收到不同的错误。根据上面链接的答案,我的 LawnGrid.java 开头为:

@DefaultProperty(value = "lawnGrid")
public class LawnGrid extends GridPane {

更新:根据 Slaw 的反馈,我发现 FXML 注释出现在错误的位置,因此将其移至我的 FXController.java:

// lawn representation for lawn display in GUI
@FXML
private LawnGrid lawnGridPane = new LawnGrid();

FWIW 当我尝试运行它时,我也会得到一个 NPE,应用程序出现,但在我在 LawnGrid 中引用“this”的行上给出了 NPE。我假设我缺少一些有关 JavaFX 如何实例化对象的基本知识,并且需要在某处创建 LawnGrid,但我认为 .fxml 文件已设置了此功能。

编辑:我确实将 super() 添加到了我的构造函数中,认为这可能会产生一些影响,但事实并非如此,我相信只需使用 extends 它就会调用 super()?这是 LawnGrid.java 中的构造函数:

   public LawnGrid(){
super();
// uses default max 10 rows 15 columns
setupLawnConstraints();
}

public LawnGrid(double rows, double columns){
super();
this.numRows = rows;
this.numCols = columns;
setupLawnConstraints();
}

public LawnGrid(double rows, double columns, DoubleProperty preferredSquareSizeProperty) {
super();
this.numRows = rows;
this.numCols = columns;
this.preferredSquareSizeProperty = preferredSquareSizeProperty;
}

最佳答案

最后,我在 GridPane(或其子类)上调用 getHeight。当我终于清醒过来并认真思考时,我在物体破裂之前检查了它。

JavaFX 对象的某些属性如果先前未设置,则为 null。使用 getHeight() 访问它们会导致(正确的)空指针异常。

“height”就是其中之一,还有一个“_height”,但我还没弄清楚如何访问它。

关于java - 如何在 JavaFX 中扩展 GridPane 以覆盖 add() 会导致 NPE、场景生成器中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55445052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com