JAVAFX确定单击了哪个标签

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVAFX确定单击了哪个标签相关的知识,希望对你有一定的参考价值。

我没有在这里找到解决方案我可以使用所以我希望有人在这里找一分钟来帮助我。我正在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(和标签,如果你愿意)放在一个(有效的)最终变量中:

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确定单击了哪个标签的主要内容,如果未能解决你的问题,请参考以下文章

快速检查单击了哪个标签栏项目

如何确定单击了哪个单元格?

确定在使用按钮数组时单击了哪个提交按钮

确定在 Django 表单提交中单击了哪个提交按钮

Android小部件:如何确定单击了哪个按钮?

Android确定单击哪个按钮以启动活动