我发现了一篇关于 JavFx2 和关于这个的非常有趣的文章
http://docs.oracle.com/javafx/2/events/handlers.htm
我想知道如何创建一个扩展线条特征的对象,以便插入事件管理。
例如,单击鼠标左键,鼠标左键单击绘制的线,或在鼠标悬停线(选定线)时从键盘按canc键,或鼠标左键单击线外?
非常感谢。
我发现了一篇关于 JavFx2 和关于这个的非常有趣的文章
http://docs.oracle.com/javafx/2/events/handlers.htm
我想知道如何创建一个扩展线条特征的对象,以便插入事件管理。
例如,单击鼠标左键,鼠标左键单击绘制的线,或在鼠标悬停线(选定线)时从键盘按canc键,或鼠标左键单击线外?
非常感谢。
这是使用 JavaFX 时反复出现的问题。目前,我正在用不可见的厚对应物覆盖所有薄视觉效果,并在厚视觉效果上注册事件侦听器。
例如,您有一个由多个线段组成的连接:
// construct invisible fat lines for selection
selectionLines.getChildren().clear();
for (Node child : connection.getChildren()) {
Line line = (Line) child;
Line selLine = new Line(line.getStartX(), line.getStartY(), line.getEndX(), line.getEndY());
selLine.setLayoutX(line.getLayoutX());
selLine.setLayoutY(line.getLayoutY());
selLine.setStrokeWidth(SELECTION_LINE_WIDTH);
selLine.setStroke(INVISIBLE);
selectionLines.getChildren().add(selLine);
}
connection.getChildren().add(selectionLines);
我刚刚遇到了同样的问题。
我想要一个“绘图面板”,我可以在其中放置可拖动的辅助线。您可以通过 'setOnMousePressed' 和 'setOnMouseDragged' 附加 MouseHandler 以获得此类行为。
但最大的问题是,线条尺寸太小了,你必须很幸运才能用鼠标击中它。
这就是为什么我以相反的方式实现它。我在绘图面板上附加了一个鼠标处理程序,每次单击鼠标时,我都会检查鼠标光标是否在任何辅助线附近。这让我有机会添加一点容差,因此可以单击和拖动线条。
我不能说这是否是最有效的方法,如果其他人提出更好的想法,我会很高兴。
编辑: 同时我写了一个小测试,发现我的第一个想法不是那么好。
我的第二个想法是将线包裹在一个窗格中并将它的 y 坐标(对于垂直线)放在该窗格内。在该窗格中,我设置了鼠标处理程序。而且由于我使窗格的首选高度为 5 像素,因此鼠标光标现在有足够的容差来捕捉该行。
如果有人对此想法感兴趣,我可以发布一些示例代码。
问候,-克里斯-