Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对多个按钮使用一个JavaFX方法_Java_Eclipse_Javafx_Fxml_Scenebuilder - Fatal编程技术网

对多个按钮使用一个JavaFX方法

对多个按钮使用一个JavaFX方法,java,eclipse,javafx,fxml,scenebuilder,Java,Eclipse,Javafx,Fxml,Scenebuilder,现在我正在使用EclipseLuna、JavaFX和SceneBuilder。我有大约40个按钮,我想使用一个通用的“buttonPressed”动作方法,每个按钮都可以使用。大概是这样的: public void buttonPressed(ActionEvent event, Button b) { b.setText("Pressed"); } 但是,当我在SceneBuilder中更改On Action面板时,当我尝试运行程序时,会出现以下异常: javafx.fxml.Loa

现在我正在使用EclipseLuna、JavaFX和SceneBuilder。我有大约40个按钮,我想使用一个通用的“buttonPressed”动作方法,每个按钮都可以使用。大概是这样的:

public void buttonPressed(ActionEvent event, Button b) {
    b.setText("Pressed");
}
但是,当我在SceneBuilder中更改On Action面板时,当我尝试运行程序时,会出现以下异常:

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();
    // ...
}

只是补充我最初的问题;问题似乎是将按钮b作为参数传入。删除它,并在方法中指定一个按钮可以解决异常(但不是当前的问题,因为该方法现在只能由一个按钮使用)。是否有其他方法可以定位按下的按钮,然后将其传递给该方法?谢谢,我能够实现我想要的结果:D我使用了以下方法:
public void buttonPressed(ActionEvent事件){Object source=event.getSource();((标记)source.setText(“1”)}
the
(标记)
是Eclipse提供的一个自动生成的修复程序,这不是我以前见过的。你知道这是不是一个问题/坏习惯吗?我通常不喜欢被人贬低。它们有点容易发生运行时错误:例如,如果在以后的某个日期,您向侦听器注册了一个未标记为(例如,
MenuItem
)的对象,那么您的代码将编译,但会出现运行时错误。在这里,这可能是一件可以做的事情;如果您在FXML中注册按钮处理程序,并且有许多按钮,那么这是您唯一的选择,而不是为每个按钮使用一个方法。