循环遍历节点数组以添加影响外部变量的 MouseEvent

Looping through an array of nodes to add a MouseEvent that affects an external variable

我有一个 HBox 节点数组列表,需要像一组单选按钮一样工作。单击任何节点将更新与单击的节点在数组中的位置对应的 int 值。

这是一个数组列表,因为HBox节点的数量需要是动态的,并且在运行时根据参数确定。每个 HBox 的格式都是一样的,但是里面标签的内容是唯一的。

遍历arraylist (arrayOfHBox) 以向每个节点添加鼠标单击事件会产生内部类 不接受非最终变量的问题(因此在鼠标事件中我无法分辨什么位置我所在的数组)。我理解为什么会发生这种情况,但我不确定是否有其他方法可以解决这个问题。

int selectedIndex=-1; //the int to determine which "radio button" HBox is clicked

for (int i=0;i<arrayOfHBox.size();i++)
{
    arrayOfHBox.get(i).addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() 
    {
        @Override
        public void handle(MouseEvent event) 
        {
            selectedIndex=i;  //Won't compile
            event.consume();
        }
    });
}

接下来的问题是:有没有一种方法可以将鼠标处理程序添加到所有 HBox 节点,其中每个 HBox 节点都会设置一个等于被单击节点在数组中的位置的外部变量?

然后e。 G。使用最终的中间变量,如

int selectedIndex=-1; //the int to determine which "radio button" HBox is clicked

for (int i=0;i<arrayOfHBox.size();i++)
{

    final int index = i;
    arrayOfHBox.get(i).addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() 
    {
        @Override
        public void handle(MouseEvent event) 
        {
            selectedIndex=index;  //Won't compile
            event.consume();
        }
    });
}

或在对象级别上工作,使用 event.getSource() 确定源并选择 hbox 作为 arraylist 的项目。