gpt4 book ai didi

JavaFX 在 EventHandler 中使用父类(super class)

转载 作者:行者123 更新时间:2023-11-30 02:00:00 26 4
gpt4 key购买 nike

我有多个 Controller 类,它们扩展了另一个 Controller 。当我在扩展 Controller 类中创建 EventHandler 时,我无法使用“super.something”。它可以在普通方法中工作,但不能在 EventHandler 中工作。还有其他选择吗?

这里是一个小例子摘录:

public class ViewController {

@FXML
private TextField idField;

public TextField getIdField() {
return idField;
}
}

-

public class ExtendingViewController extends ViewController {

@FXML
private Label testLabel;

private EventHandler<ActionEvent> createBtnHandler = new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {

//This does not work. "super" does not seem to exist in this method.
testLabel.setText(super.getIdField());

}
};
}

public void testMethod(){
//this does work
testLabel.setText(super.getIdField());
}
}

最佳答案

这里不需要使用super。如果省略 super.,java 编译器会检查匿名类中是否有 getIdField 方法,并且由于没有找到该方法,因此它会检查包含该方法的类。 (在 testMethod 中使用 superthis 不会更改结果,因为 getIdField 不会在 中被覆盖扩展ViewController。)

testLabel.setText(getIdField().getText());

但是,您可以使用 ContainingClass.super 访问包含类的父类(super class)的成员:

private EventHandler<ActionEvent> createBtnHandler = new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
testLabel.setText(ExtendingViewController.super.getIdField().getText());
}
};

关于JavaFX 在 EventHandler 中使用父类(super class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53210339/

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