现在,我正在使用Eclipse Luna,JavaFX和SceneBuilder。我有大约40个按钮,我想使用每个按钮都可以使用的通用“ buttonPressed”操作方法。像这样:

public void buttonPressed(ActionEvent event, Button b) {
    b.setText("Pressed");
}


但是,当我在SceneBuilder中更改“正在执行”面板时,尝试运行程序时出现以下异常:


  javafx.fxml.LoadException:解决onAction ='#buttonPressed'时出错,事件处理程序不在命名空间中或脚本中有错误。


我错过了一步吗?还是有人知道使用一种方法来控制多个按钮的单击行为的替代方法吗?

任何帮助表示赞赏!

最佳答案

如您的注释中所述,onAction属性唯一允许的签名是零参数,或者是ActionEvent的单个参数。

您可以按以下方式获取事件的来源:

@FXML
public void buttonPressed(ActionEvent event) {
    Object source = event.getSource();
    // ...
}


当然,如果您知道只在按钮上注册了处理程序,则可以

@FXML
public void buttonPressed(ActionEvent event) {
    Button button = (Button) event.getSource();
    // ...
}

07-27 19:54