是的,标题看起来像是一个笑话的设置但却不是。
我正在使用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
。
点击WireWidget
后点击另一个ConnectorWidget
,即可在主窗格中创建新的ConnectorWidget
。
可以找到其余的代码on GitHub(在提问时我最后一次提交的永久链接)。
注意:要从GitHub运行代码,您需要this library。
答案 0 :(得分:2)
您已经将答案标记为正确,但我认为这会导致您走错方向。它可以解决您当前的问题,但一般来说,并不总是能够以这种方式组织形状。
James_D已经提到了这里真正出错的地方。这在post
中有详细描述答案 1 :(得分:1)
显然,这与Node
覆盖另一个Node
的事实有关。
想象一下,您使用StackPane
作为Layout.Adding首先是Circle
,然后是Line
,如果该行包含Circle已经执行的某些像素,那么Circle
的某些部分{1}}将无法显示。
在这里,我可以想象 3 可能的解决方案。
1)如果您使用的是Canvas
,请选择首先绘制的内容。Circle
或Line
?
2)如果您使用某种布局,则可以使用getChilder.add/addAll
方法进行播放。因此,您首先将Circle
然后Line
作为子项添加到布局中。
3并且更好)
使用StackPane
您可以随意添加子项。然后您可以使用现有的Node类方法(toFront(); and toBack();
)
例如,想象一下Line在Circle的前面,然后调用Circle.toFront();圆圈将出现在前面。