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



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

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

通过arraylist (arrayOfHBox)循环向每个节点添加鼠标单击事件会产生内部类不接受非final变量的问题(因此在鼠标事件中,我无法告诉我所处的数组位置)。我理解为什么这必须发生,但我不确定是否有其他方法可以解决这个问题。

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节点,其中每个节点都将设置一个外部变量等于单击节点在数组中的位置?

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

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作为数组列表的项。

相关内容

  • 没有找到相关文章

最新更新