javafx在线处理事件

时间:2012-11-16 18:56:33

标签: events line javafx-2

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

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

我想知道如何创建一个扩展一行特征的对象,以便插入一系列事件。

在示例中,单击鼠标左键,在绘制的线上双击鼠标左键,或者在鼠标悬停在线上(选择行)时按键盘上的canc键,或者在线外点击鼠标左键?

非常感谢。

2 个答案:

答案 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);