【发布时间】:2018-03-05 00:49:09
【问题描述】:
我在这里没有找到解决方案,所以我可以使用,所以我希望这里有人会找时间帮助我。我正在 javafx 中制作我的第一个应用程序,以了解这里的工作原理......并且:
通过 fx:define,我在我的 fxml 文件中定义了一个 labelList,它基本上由所有在游戏中的玩家名称组成。它包含 10 个标签,但如果只有 4 个播放器,则只有 4 个标签设置为可见,这就是为什么在下面的循环中我使用 playerList.size()。
通过点击标签,我希望我的应用能够确定点击了哪个标签。所以我可以获取播放器的 id 以在其他功能中使用它(例如,我选择一个标签,然后单击一个按钮,该按钮将点添加到具有与标签相同 id 的播放器)。
我设法在没有循环的情况下做到了这一点,并且效果很好:
labelList.get(0).setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
labelList.get(0).setStyle("-fx-font-weight: bold");
setId(0);
}
});
但我一直想知道是否可以一次循环执行此操作。从更大的角度来看,如果有更多的标签和其他东西,那么查看单独启动 50 个处理程序的代码看起来真的很可怕。如果我尝试运行此循环,我会收到错误消息“局部变量定义在 封闭范围必须是最终的”
@FXML
private void activatePlayer() {
for( int id = 0; id < playerList.size(); id++) {
labelList.get(id).setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
labelList.get(id).setStyle("-fx-font-weight: bold");
setId(id);
}
});
}
}
【问题讨论】:
标签: javafx event-handling label fxml