2012-11-18 42 views
1

我有這樣的代碼:如何progate事件給兒童

public void handle(MouseEvent event) { 
     //if (event.getEventType() == MouseEvent.MOUSE_CLICKED) { 
     if ((event.getEventType() == MouseEvent.MOUSE_PRESSED)&& 
      (event.isPrimaryButtonDown())) { 
       x1 = x2 = event.getX(); 
       y1 = y2 = event.getY(); 
       line = new BoundLine(pane, event, x1, y1, x2, y2); 
       pane.getChildren().add(line);      
       //line.getEventDispatcher().dispatchEvent(event, null); 
     } 
    } 

難道不可能性立即傳播「的MouseEvent事件」到對象javafx.scene.shape.Line(代碼行)?我曾嘗試line.getEventDispatcher().dispatchEvent(event, null);但我得到這個消息的錯誤:

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35) at testjavafxapplication.LinesEditCtx02$MouseHandler.handle(LinesEditCtx02.java:243) at testjavafxapplication.LinesEditCtx02$MouseHandler.handle(LinesEditCtx02.java:105) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:69) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170) at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:33) at javafx.event.Event.fireEvent(Event.java:171) at javafx.scene.Scene$MouseHandler.process(Scene.java:3324) at javafx.scene.Scene$MouseHandler.process(Scene.java:3164) at javafx.scene.Scene$MouseHandler.access$1900(Scene.java:3119) at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1559) at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2261) at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:228) at com.sun.glass.ui.View.handleMouseEvent(View.java:528) at com.sun.glass.ui.View.notifyMouse(View.java:922) at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) at com.sun.glass.ui.gtk.GtkApplication$3$1.run(GtkApplication.java:82) at java.lang.Thread.run(Thread.java:722)

+0

我的目標是在兒童創建後立即將鼠標事件從父窗口傳遞給子窗口。 實施例: 1)左鼠標點擊的圖表 2上的任何地方),而持續按下,從窗格是創建一個線 3的第一點)仍然按下並拖動然後,創建一個行:這意味着鼠標事件必須從窗格轉移到線路 – famedoro

回答

-1

正在發送到#dispatchEvent的EventDispatchChain(第二個參數)不能爲空。不幸的是,沒有公開的實現,或者他們在com.sun包中,所以你需要實現你自己的EventDispatchChain。

+0

感謝您的回覆。你能幫助我舉一個例子,爲了傳播mouservent到線? – famedoro

+0

我不確定在com.sub。*中的代碼的許可限制,或者我會複製/粘貼EventDispatchChainImpl的源代碼。我假設BoundLine在它的一個屬性上設置了一個鼠標監聽器,難道你不能直接用鼠標事件調用它而不是通過調度機制? –

+0

感謝您的回覆,我嘗試了您建議的方法,但不起作用。還有其他解決方案嗎? – famedoro