JAVAFX 判断哪个标签被点击
JAVAFX Determining which label has been clicked
我还没有找到我可以使用的解决方案,所以我希望这里有人能抽出时间来帮助我。我正在用 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);
}
});
}
}
此站点已多次回答此问题,但我的快速搜索找不到相同的答案。
只需将 id(和标签,如果你愿意)放在一个(有效的)final 变量中:
for( int id = 0; id < playerList.size(); id++) {
Label label = labelList.get(id);
int currentId = id ;
label.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
label.setStyle("-fx-font-weight: bold");
setId(currentId);
}
});
}
我还没有找到我可以使用的解决方案,所以我希望这里有人能抽出时间来帮助我。我正在用 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);
}
});
}
}
此站点已多次回答此问题,但我的快速搜索找不到相同的答案。
只需将 id(和标签,如果你愿意)放在一个(有效的)final 变量中:
for( int id = 0; id < playerList.size(); id++) {
Label label = labelList.get(id);
int currentId = id ;
label.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
label.setStyle("-fx-font-weight: bold");
setId(currentId);
}
});
}