我发现了一篇非常有趣的关于JavFx2和关于这个的文章
http://docs.oracle.com/javafx/2/events/handlers.htm
我想知道如何创建一个扩展一行特征的对象,以便插入一系列事件。
在示例中,单击鼠标左键,在绘制的线上双击鼠标左键,或者在鼠标悬停在线上(选择行)时按键盘上的canc键,或者在线外点击鼠标左键?
非常感谢。
答案 0 :(得分:0)
我刚遇到同样的问题。
我希望有一个'绘图面板',我可以放置可拖动的辅助线。 您可以通过'setOnMousePressed'和'setOnMouseDragged'附加MouseHandler来获取此类行为。
但最重要的问题是,线条尺寸太小,以至于你必须用鼠标来点击它。
这就是为什么我以相反的方式实现它。 我将一个鼠标处理程序附加到绘图面板,每次鼠标单击我检查鼠标cusor是否在任何帮助行的附近。 这给了我机会添加一点容差,因此可以点击和拖动线条。
我不能说这是否是最有效的方式,如果其他人提出更好的想法,我会很高兴。
修改强> 与此同时,我写了一个小测试,发现我的第一个想法并不那么好。
我的第二个想法是将线条包裹在一个窗格中,并将该窗格中的y坐标(对于垂直线条)居中。 在该窗格中,我设置了鼠标处理程序。由于我使窗格的首选高度为5像素,因此现在足以容忍鼠标光标捕获该行。
如果有人对这个想法感兴趣,我可以发布一些示例代码。
问候,-chris -
答案 1 :(得分: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);