2010-06-08 62 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; 
      }); 
    } 
相關問題