我在一个板上有几个对象,我想通过坐标获取这些对象的索引。我尝试过制作一个MouseEvent
处理程序,并使用getBoundInParent()
与MouseInfo.getPointerInfo().getLocation()
相结合,但没有成功。这些方法给了我不同的坐标,无法匹配它们。
我是否应该用光标的坐标画一个矩形,并使用< code > getBoundInParent()。intersects方法?
有什么建议吗?
解决办法
在每个形状上,提供SetOnMouseEnter和SetOnMouse Exited处理程序,以捕获鼠标进入和退出事件,并记录鼠标所在形状的索引。
假设
我假设您需要与光标热点相交(例如鼠标指针箭头的尖端),而不是光标形状或光标的矩形边界(因为热点的相交是光标工作的标准方式)。
示例应用程序输出
示例代码
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.effect.DropShadow;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.*;
import javafx.stage.Stage;
public class ShapeIntersector extends Application {
private static final Shape[] shapes = {
new Circle(50, Color.AQUAMARINE),
new Rectangle(100, 100, Color.PALEGREEN)
};
private static final DropShadow highlight =
new DropShadow(20, Color.GOLDENROD);
@Override
public void start(Stage stage) throws Exception {
HBox layout = new HBox(40);
layout.setPadding(new Insets(30));
layout.setAlignment(Pos.CENTER);
Label highlightedShapeLabel = new Label(" ");
highlightedShapeLabel.setStyle(
"-fx-font-family: monospace; -fx-font-size: 80px; -fx-text-fill: olive"
);
for (Shape shape: shapes) {
layout.getChildren().add(shape);
shape.setOnMouseEntered(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
shape.setEffect(highlight);
int idx = layout.getChildren().indexOf(shape) + 1;
highlightedShapeLabel.setText(
"" + idx
);
}
});
shape.setOnMouseExited(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
shape.setEffect(null);
highlightedShapeLabel.setText(" ");
}
});
}
layout.getChildren().add(highlightedShapeLabel);
stage.setScene(new Scene(layout));
stage.show();
}
public static void main(String[] args) { launch(args); }
}
我目前正在使用JavaFX研究不同形状之间的边界相交。我想检测两个多边形在它们的点上的碰撞,而不是在它们的边界上(即2个多边形)。 请参阅图1:不期望的行为,以及图2:期望的行为。 是否有任何现有的算法可以帮助我或使用任何库?提前感谢:) 在这里找到我的解决方案: 输出: 它似乎工作正常,我将使用Path对象进行测试以替换多边形objets。
我有两个矩形,每个矩形有4个值: 左侧位置< code>X、顶部位置< code>Y、宽度< code>W和高度< code>H: 矩形不旋转,如下所示: 判断两个矩形的交集是否为空的最佳解是什么?
我正在尝试使用postgis执行空间统计。偶尔我会ST_Clip粉碎并停止查询。我认为当面几乎不与栅格相交时会发生这种情况。请参阅下面的示例。 通过上述查询,我收到以下错误。 我希望不返回任何记录,或者某种空栅格。在我的生产代码中,几何/栅格对是通过面表和栅格表之间的找到的。我想过为栅格制作边界框的一种方式,它比栅格的范围略小,但这很丑陋...... 我的postgres和postgis版本是 x
问题内容: 测试2个矩形是否相交的快速方法是什么? 在Internet上进行了搜索,找到了这种单行代码(WOOT!),但我不知道如何用Javascript编写它,它似乎是用C ++的古老形式编写的。 问题答案: 这就是将代码转换为JavaScript的方式。请注意,正如注释所建议的那样,您的代码和本文的代码中都有一个错字。该功能应该并且应该具体起作用。 测试用例:
问题内容: 我有一个40x40的网格,显示地图。当前,我有以下方法监听右键单击: 我要实现以下内容: 如果右键单击后选择了菜单项,则我想将右键单击的位置保存在变量中, 例如[32,12](如果右键单击跨越了32个网格窗格,向上为12块)。 关于如何执行此操作的任何建议? 提前致谢 问题答案: 向网格中的每个单元格添加一个侦听器,而不是向舞台添加一个鼠标侦听器。用于上下文菜单处理的适当侦听器是处理程
我有一个程序,其中在窗格中拖动2个圆圈。还有一条线连接它们和上面显示的距离。我的问题是,当我用鼠标以缓慢的速度拖动圆圈时,它们移动得很好,但是当我移动它更快时,圆圈就会停止。 这里是计算圆周阻力的地方