java - 缩放 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() );
...
}
预期结果:每个十六进制都是可点击的,根据点击的十六进制给出不同的响应。实际结果:如果放置在右侧或下方,则在添加的六角之前添加的六角是不可点击的。(锚点在左上角)
解决方案
推荐阅读
- c++ - CGAL 将非流形 Nef_polyhedron_3 转换为三角形网格
- apache-spark - 如何在pyspark中读取多级json?
- jenkins - 没有这样的属性:类的 scm: Jenkins 版本中的 groovy.lang.Binding。2.107.2。
- python - 如何获取具有多个打印语句的 API 调用函数以在 Flask 中显示?
- sql-server - 基于连接字符串/环境的 SSMS 颜色选项卡
- android - 在 Android Auto Queue 中选择媒体项不执行任何操作
- php - Nginx:将子域重写到其中的文件夹和文件
- python - 如何将 Celery 任务从一台机器发送到另一台机器?
- webrtc - 边缘回声 webrtc
- javascript - 数组数据类型操作