为什么我不能从事件侦听器调用方法但可以在 class 的其他地方调用?
Why can't I call method from event listener but can elsewhere in class?
我在控制器 class 中有以下代码用于为组合框提供事件侦听器的 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
}
});
不过,我可以在 class 的其他地方调用该方法。更具体地说,我可以在我的控制器中的 initialize()
函数中调用它,该侦听器也位于该函数中。为什么我会遇到这个问题?
因为this
里面的listener指的是listener当前实例,而不是controller实例。要引用容器实例,请使用语法 ControllerClassName.this
。
这里的问题是:
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`
}
}
在这个匿名的 class ChangeListener
中没有名为 setClassList()
的方法,所以编译器会抱怨它。您可以尝试简单地避免使用 this
关键字:
setClassList(courseProcessed);
或
你也可以试试这个:
YourClass.this.setClassList(courseProcessed);
我在控制器 class 中有以下代码用于为组合框提供事件侦听器的 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
}
});
不过,我可以在 class 的其他地方调用该方法。更具体地说,我可以在我的控制器中的 initialize()
函数中调用它,该侦听器也位于该函数中。为什么我会遇到这个问题?
因为this
里面的listener指的是listener当前实例,而不是controller实例。要引用容器实例,请使用语法 ControllerClassName.this
。
这里的问题是:
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`
}
}
在这个匿名的 class ChangeListener
中没有名为 setClassList()
的方法,所以编译器会抱怨它。您可以尝试简单地避免使用 this
关键字:
setClassList(courseProcessed);
或
你也可以试试这个:
YourClass.this.setClassList(courseProcessed);