【发布时间】:2016-10-27 16:10:49
【问题描述】:
是的,标题看起来像是在开玩笑,但其实不是。
问题
我正在使用 JavaFX 编写程序。我在窗格中添加了一些绘图(来自javafx.scene.shape 的标准线、圆、矩形等)。我在一些圈子上设置了onMouseEnter() 来改变它们的颜色。效果很好,除非我像下图那样放置一条线:
圆圈A 会正常改变颜色,直到我添加B 行。当我将圆圈悬停在A 上时,什么也没有发生。
我通过测试发现当圆圈位于线条的边界框内时出现问题(如果圆圈在边界框的一半,则外面的那一半表现正确,而里面的那一半则没有) .
这是正常行为吗?我能做些什么来预防它?
部分代码
在 ConnectorWidget.java 中:
Circle circle = new Circle(...);
circle.setOnMouseEntered(event -> circle.setFill(Color.RED));
circle.setOnMouseExited(event -> circle.setFill(Color.WHITE));
getChildren().add(circle);
在 TransistorWidget.java 中:
ConnectorWidget base = new ConnectorWidget(...);
getChildren().add(base);
在 WireWidget 中:
Line line = new Line(...);
getChildren().add(line);
点击后可以将新的TransisorWidget 添加到主窗格中。
单击ConnectorWidget,然后单击另一个ConnectorWidget,可以在主窗格中创建一个新的WireWidget。
其余代码可以在on GitHub 找到(固定链接到我提出问题时的最后一次提交)。
注意:要从 GitHub 运行代码,您需要 this library。
【问题讨论】:
-
我可以重新创建的唯一方法是调用
line.setPickOnBounds(true);。你在什么地方有那个设置吗? -
尝试颠倒添加圆和线的顺序,你会得到相反的行为。
-
@James_D 我没有。
-
你能创建一个minimal reproducible example 来重新创建它吗?
-
@talex 我不能,线的坐标取决于圆的坐标。必须先添加圆圈。