2010-06-08 58 views
0

当我关闭它们时,我花了一段时间才意识到鼠标事件通过阻塞对话框时发生了什么,但我终于明白了原因。我仍然不知道解决这个问题的好方法。JavaFX MouseEvent继续当我删除它发生的对象

我有一个自定义对话框(即阻止鼠标)与关闭按钮。当我点击关闭按钮时,我从场景中移除了对话框,但是JavaFx仍在处理MouseEvent,现在它发现在取消按钮所在的位置没有任何屏幕,因此组件接收到一个MouseEvent。当我看到他们按下取消并删除对话框时,如何使mouseEvent停止处理?或者,有没有办法让对话框的删除不会发生,直到它完成处理MouseEvent?

示例代码的问题:

import javafx.stage.Stage; 
import javafx.scene.Scene; 
import javafx.scene.shape.Rectangle; 
import javafx.scene.input.MouseEvent; 
import javafx.scene.control.Button; 

var theScene:Scene; 
var btn:Button; 

Stage { 
    title: "Application title" 
    scene: theScene= Scene { 
     width: 500 
     height: 200 
     content: [ 
     Rectangle{ 
      width: bind theScene.width 
      height: bind theScene.height 
      onMouseClicked: function(e:MouseEvent):Void{ 
           println("Rectangle");} 
     }, 
     Button{ 
      layoutX: 20 layoutY: 50 
      blocksMouse: true 
      text: "JustPrint" 
      action:function():Void{ 
        println("JustPrint");} 
     }, 
     btn = Button{ 
      layoutX: 20 layoutY: 20 
      blocksMouse: true 
      text: "Cancel" 
      action:function():Void{ 
        println("Cancel"); 
        delete btn from theScene.content;} 
     }, 
     ] 
    } 
} 

当你按下 “JustPrint” 你:

JustPrint 

当你按下 “取消”,您可以:

Cancel 
    Rectangle 

回答

0

待办事项你真的需要在矩形上处理onMouseClicked?如果您将其更改为onMousePressed,则问题已消失。

显然,该按钮需要全鼠标按下/鼠标释放序列来执行操作,但删除(或隐藏)发生在第二个被拦截之前。而且似乎鼠标释放事件足以触发onMouseClicked事件。 所以,如果你的矩形很满意一个简单的onMousePressed,你有一个解决方法...

+0

我确实需要的onMouseClicked在我原来的计划背景(或至少onMouseReleased这给了同样的问题),但它看起来像我可以只删除按钮动作,并使其响应onMouseClicked,而问题解决了。 感谢您的帮助。 凯尔 – Kyle 2010-06-10 15:29:05

0

我认为你所看到的是一个时间问题。取消按钮在事件完全处理之前被移除,因此事件被传递给Rect,因为取消按钮上的“blocksmouse”已被删除。试试这个:

 action:function():Void{ 
      println("Cancel"); 
      FX.deferAction(function() { 
      delete btn from theScene.content; 
      }); 
    } 
相关问题