1

我发现了一篇关于 JavFx2 和关于这个的非常有趣的文章

http://docs.oracle.com/javafx/2/events/handlers.htm

我想知道如何创建一个扩展线条特征的对象,以便插入事件管理。

例如,单击鼠标左键,鼠标左键单击绘制的线,或在鼠标悬停线(选定线)时从键盘按canc键,或鼠标左键单击线外?

非常感谢。

4

2 回答 2

0

这是使用 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);
于 2014-02-10T12:47:14.090 回答
0

我刚刚遇到了同样的问题。

我想要一个“绘图面板”,我可以在其中放置可拖动的辅助线。您可以通过 'setOnMousePressed' 和 'setOnMouseDragged' 附加 MouseHandler 以获得此类行为。

但最大的问题是,线条尺寸太小了,你必须很幸运才能用鼠标击中它。

这就是为什么我以相反的方式实现它。我在绘图面板上附加了一个鼠标处理程序,每次单击鼠标时,我都会检查鼠标光标是否在任何辅助线附近。这让我有机会添加一点容差,因此可以单击和拖动线条。

我不能说这是否是最有效的方法,如果其他人提出更好的想法,我会很高兴。

编辑: 同时我写了一个小测试,发现我的第一个想法不是那么好。

我的第二个想法是将线包裹在一个窗格中并将它的 y 坐标(对于垂直线)放在该窗格内。在该窗格中,我设置了鼠标处理程序。而且由于我使窗格的首选高度为 5 像素,因此鼠标光标现在有足够的容差来捕捉该行。

如果有人对此想法感兴趣,我可以发布一些示例代码。

问候,-克里斯-

于 2013-04-08T09:50:30.293 回答