我在控制器类中有以下代码,用于为组合框提供事件侦听器的JavaFX GUI:
courseComboBox.getSelectionModel().selectedItemProperty()
.addListener(new ChangeListener<String>() {
@Override
public void changed(
ObservableValue<? extends String> selected,
String oldValue, String newValue) {
// Do stuff
}
});
然而,当我尝试从其中调用另一个方法时,我无法:
courseComboBox.getSelectionModel().selectedItemProperty()
.addListener(new ChangeListener<String>() {
@Override
public void changed(
ObservableValue<? extends String> selected,
String oldValue, String newValue) {
this.setClassList(courseProcessed);
// Do Stuff
}
});
我可以在课堂的其他地方调用该方法。更具体地说,我可以在我的控制器中的initialize()
函数内调用它,这个监听器也驻留在。我为什么会遇到这个问题?
答案 0 :(得分:3)
因为侦听器中的this
引用了侦听器当前实例,而不是控制器实例。要引用容器实例,请使用语法ControllerClassName.this
。
答案 1 :(得分:1)
问题在于:
new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> selected, String oldValue, String newValue) {
this.setClassList(courseProcessed);// `this` refers to the current instance of the anonymous class `ChangeListener`
}
}
在这个匿名类ChangeListener
中,没有名为setClassList()
的方法,因此编译器对此抱怨。您可以尝试简单地避免使用this
关键字:
setClassList(courseProcessed);
OR
你也可以试试这个:
YourClass.this.setClassList(courseProcessed);