循环遍历节点数组以添加影响外部变量的 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 的项目。
我有一个 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 的项目。