将父项中的鼠标和滚动事件传递给子项(在JavaFX中)

时间:2013-01-07 09:38:26

标签: javafx-2

我内有StackPaneGroup。本集团拥有实际的视觉内容,可由用户进行平移和缩放。该小组进行了坐标转换。

我希望鼠标和滚动事件的行为相同,即使它们发生在组外(因为它已被缩小或由于组图形中的漏洞)。

我不能直接从StackPane转发(鼠标)事件,因为坐标系不同。

我尝试在组后面放置一个宏大的透明矩形,但这会导致图形系统纹理大小溢出(=不好)。

现在我正在考虑在StackPane和Group中都有处理程序,并在Group中传递协调校正的单独方法。工作,但是有没有我没有意识到的更整洁的机制?

2 个答案:

答案 0 :(得分:0)

我解决这个问题的方式:

Group构造函数中,我为其父级设置了处理程序:

runLater {   
  val pv= parent.value
  assert( pv != null )

  ..some local var's here..

  pv.onMousePressed = (ev: MouseEvent) => if (ev.primaryButtonDown) {
  ...

runLater注意不需要将Group附加到其父级(或者将潜在的父级句柄作为构造函数参数)。一旦runLater-block被执行,就会建立父母身份。

我发现这是一个相当简洁的方法。它允许所有事件处理在集团内,但仍然使用父母的更大的房地产。没有代码需要在两个地方。坐标转换始终是相同的,因为它是被调用的父事件(而不是组的)。

我正在使用Scala,但同样的方法应该适用于任何JVM语言。

注意:使用if开始处理程序不会在当前的ScalaFX中编译。这是ScalaFX的一个小故障,可以很容易地修复(问我详细信息)。

答案 1 :(得分:0)

只是我的两分钱:我在JavaFx 8中遇到了同样的问题,我通过用一个窗格替换我的Group来解决它。没有做任何改变,它就像一个魅力。知道可能有用。