java - 如何获取JavaFX程序控制器内部的调用节点
问题描述
我正在做一个 javafx 程序,当我试图让许多节点共享相同的 onAction 函数时,我被卡住了。
这是程序内部的37个标签节点,我将它们添加到一个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();
});
}
推荐阅读
- r - 在ggplot2中重新创建直方图ldahist()?
- python - 在 Python 的 Windows 10 中从屏幕上抓取一个窗口
- python - get_queryset() 缺少 1 个必需的位置参数:'country_id'
- .net-core - 在 .netcore 中使用 .NetFramwork 库
- python - 如何操作Excel整行
- azure-data-factory - 自定义 Azure 数据工厂 ARM 模板的参数
- python-3.x - 任何人都可以向新手解释云功能吗?
- angular - angular2如何在未字符串化的div中显示属性值
- rest - 简单(和)脏 Firestore 身份验证规则
- elasticsearch - Couchbase Elasticsearch 连接器保存检查点相同的存储桶