如何在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();
});
}
我正在做一个 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();
});
}