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

时间:2019-01-26 14:26:07

标签: tornadofx

我有一个borderpane作为根视图,并且它有点大,所以我想将它们分成小块……使用View s没问题,我可以轻松地将它们分成文件和类。

我遇到的问题是,当我想为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中,最佳的等效条件是什么?

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

1 个答案:

答案 0 :(得分:0)

哦,它就在我的鼻子下面。我将thisborderpane)传递给一个方法,它按预期工作。

override val root = borderpane{
    setListeners(this)
}


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