我在TilePane中有很多ImageViews,它位于StackPane内部,然后是ScrollPane。 TilePane的子节点之间没有边框,填充或边距,因此我没有机会点击ImageView。当我点击图像时,我希望MouseEvent的目标是ImageViews,而不是它是TilePane。
如何让事件链在ImageView上结束而不是在TilePane的早期结束?
否则,有没有办法可以使用其他信息获取ImageView?也许使用事件的坐标?
答案 0 :(得分:5)
我这样做的常用方法就是将鼠标监听器注册到我感兴趣的节点;在您的情况下,这意味着为每个ImageView
注册一个鼠标监听器。如果需要,让每个鼠标监听器都可以引用其注册的特定图像视图或其他数据(例如文件名),这很容易。
可能会发生一件事情:如果你的图像有透明像素,那么默认情况下鼠标点击图像的那一部分"通过"到下面的节点。您可以通过在图片视图上调用imageView.setPickOnBounds(true);
来更改此行为。
一些测试代码。如果你运行它,你会看到一些带有不同颜色背景的编号图像。大约四分之一的人有透明背景(它们看起来是白色的)。如果单击这些(但不是数字的实际文本),您将看到使用滚动窗格和堆栈窗格注册的鼠标处理程序将tile窗格作为目标,并且使用{{注册的处理程序1}}甚至没有被调用。对于没有透明背景的人,目标始终是ImageView
。如果您选中该复选框,则所有ImageView
的{{1}}为pickOnBounds
,透明和不透明图片的行为均符合您的要求。
true