我想在根视图中为侦听器创建一个单独的方法,但它抛出了 NPE



我有一个borderpane作为根视图,它变得有点大,所以我想将它们分成小块......有了View没有问题,我可以轻松地将它们分成文件和类。

我遇到的问题是,当我想为视图的侦听器创建一个单独的方法时root它会抛出 NPE。

这是我的原始代码:

override val root = borderpane {
    addClass(rootStyle)
    paddingAll = 10.0
    // listeners
        setOnMouseEntered { scaleUp() }
        setOnMouseExited { scaleDown() }
    // end listeners
    center {...}
    }
}

这是我当前抛出 NPE 的代码:

override val root = borderpane {
    addClass(rootStyle)
    paddingAll = 10.0
    setListeners() // I added this
    center {...}
    }
}
private fun setListeners(){
     with(root) {
        setOnMouseEntered { scaleUp() }
        setOnMouseExited { scaleDown() }
    }
}

我在没有with(root)的情况下尝试了它,但 IDE 将它们突出显示为错误。我还尝试在 onBeforeShow() 中调用该方法,它没有抛出任何异常,但侦听器不起作用。

处理这个问题的正确方法是什么?在Android中,我可以轻松地制作setListeners()方法并从onCreate()调用它。在 TornadoFX 中,最佳等价物是什么?

编辑:我找到了一个工作代码,但我仍然不确定这是否是最佳方法......如果您有更好的方法来处理此类情况,请随时添加您的答案。

呜,就在我眼皮底下。我将thisborderpane)传递给一种方法,它按预期工作。

override val root = borderpane{
    setListeners(this)
}

private fun setListeners(borderPane: BorderPane) {
    with(borderPane) {
        setOnMouseEntered { scaleUp() }
        setOnMouseExited { scaleDown() }
    }
}

相关内容

最新更新