首页 > 解决方案 > 缩放 ImageView 对象似乎不会改变可点击区域

问题描述

首先,这是我在 JavaFX 中的第一个项目,所以如果我的一般方法是错误的,我非常感谢有关如何实现它的反馈。

我正在尝试设置一个六边形网格的可点击瓷砖,类似于卡坦定居者。我通过创建一个包含图像视图的十六进制类来做到这一点。出于缩放目的,这些图像视图由一个通用参数缩放,我尝试了 .setScaleX/Y 和 setFitWidth/Heigth 函数。
重要的是,每个十六进制组合成一个 StackPane 对象,然后所有的十六进制组合成一个组。

为了检测鼠标点击,我使用了 .setOnMouseClicked() 函数。

我一直面临的问题是,当缩放参数变小时,图像视图似乎与它们的可点击区域重叠。但是,图形可以正确缩放。由于 setOnMouseClicked() 函数只响应非透明部分,这意味着点击其他重叠的图块时没有响应。

我怎么解决这个问题?有没有办法使用我的全局比例参数来缩放可点击区域?我可以使用某种沿着边界的路径以某种方式定义可点击区域吗?定义一个透明的六边形按钮并将其放置在我的图像顶部是否有效?

我尝试使用不同的缩放方法,例如 setScaleX 和 setFitWidth。我尝试在 StackPane 上使用 setMaxSize()。我尝试使用视口和剪辑,但我认为他们没有做我想要的。

public Hex(Point2D pos, double sizeScale){
    ...
    Image img = new Image( "images/hex.png" );
    m_size = new Point2D(img.getWidth(), img.getHeight());
    m_image = new ImageView( img );
    ...
    m_image.setFitWidth(  m_sizeScale * m_size.getX() );
    m_image.setFitHeight( m_sizeScale * m_size.getY() );
    ...
}

预期结果:每个十六进制都是可点击的,根据点击的十六进制给出不同的响应。实际结果:如果放置在右侧或下方,则在添加的六角之前添加的六角是不可点击的。(锚点在左上角)

标签: javajavafx

解决方案


推荐阅读