如何在JavaFX程序的控制器中获取调用节点

How to get the calling node inside the controller of JavaFX program

我正在做一个 javafx 程序,当我试图让许多节点共享相同的 onAction 函数时,我卡住了。

程序里面有37个label节点,我把它们加到一个ArrayList中,它们都是同一个函数blockChange

<Label fx:id="b66" onMouseClicked="#blockChange" text="Label" GridPane.columnIndex="3">
    <font>
        <Font name="System Bold" size="14.0" />
    </font>
</Label>

我尝试实现每次点击标签时更改标签文本的功能。但我无法指定哪个是调用该函数的标签。想知道有没有办法让调用节点进入Controller?

@FXML
void blockChange(MouseEvent event){
    //I want to get the calling label here
}

你可以这样获取源码:

@FXML
void blockChange(MouseEvent event) {
    Object source = event.getSource();
    if (source instanceof Label) {
        ((Label) source).setText("new Text");
    }
}

但如评论中所述,如果您已经在一个集合中拥有所有标签,则可以遍历该集合并为每个标签添加 EventHandler

public void initialize(URL url, ResourceBundle rb) {
    //...
    labels.forEach(this::addMouseClickedEventHandler);
}

private void addMouseClickedEventHandler(Label label) {
    label.setOnMouseClicked(event -> {
        label.setText("new text");
        event.consume();
    });
}