Events 如何将一个事件传播给孩子们

Events 如何将一个事件传播给孩子们,events,javafx-2,draw,Events,Javafx 2,Draw,我有这样的代码: public void handle(MouseEvent event) { //if (event.getEventType() == MouseEvent.MOUSE_CLICKED) { if ( ( event.getEventType() == MouseEvent.MOUSE_PRESSED )&& (event.isPrimaryButtonDown()) ) {

我有这样的代码:

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(事件,null)但我收到以下消息错误:

线程“JavaFX应用程序线程”中出现异常 位于的java.lang.NullPointerException com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35) 在 testjavafxapplication.LinesEditCtx02$MouseHandler.handle(LinesEditCtx02.java:243) 在 testjavafxapplication.LinesEditCtx02$MouseHandler.handle(LinesEditCtx02.java:105) 在 com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:69) 在 com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217) 在 com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170) 在 com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38) 在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37) 在 EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92) 在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35) 在 EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92) 位于com.sun.javafx.event.EventUtil.fireventimpl(EventUtil.java:53) 位于com.sun.javafx.event.EventUtil.firevent(EventUtil.java:33) javafx.event.event.fireEvent(event.java:171)位于 javafx.scene.scene$MouseHandler.process(scene.java:3324)位于 javafx.scene.scene$MouseHandler.process(scene.java:3164)位于 javafx.scene.scene$MouseHandler.access$1900(scene.java:3119)位于 javafx.scene.scene.impl_processMouseEvent(scene.java:1559)位于 javafx.scene.scene$ScenePeerListener.mouseEvent(scene.java:2261)位于 com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:228) 位于com.sun.glass.ui.View.handleMouseEvent(View.java:528) com.sun.glass.ui.View.notifyMouse(View.java:922)位于 com.sun.glass.ui.gtk.gtk应用程序 com.sun.glass.ui.gtk.GtkApplication$3$1.run(GtkApplication.java:82) 运行(Thread.java:722)


发送到#dispatchEvent的EventDispatchChain(第二个参数)不能为null。不幸的是,没有公共实现,或者它们在com.sun包中,因此您需要实现自己的EventDispatchChain。

感谢您的回复。为了将mouservent传播到line,您能帮我举个例子吗?我不确定com.sub.*中的代码的许可证限制,或者我会复制/粘贴EventDispatchChainImpl的源代码。我假设BoundLine在它的一个属性上设置了一个鼠标侦听器,你不能直接用鼠标事件调用它,而不是通过调度机制吗?谢谢你的回答,我尝试了你建议的方法,但它不起作用。是否有其他解决方案?getEventDispatcher()。dispatchEvent是传播事件的唯一方法?我的目标是在创建子项后立即将鼠标事件从父项(窗格)传递给子项(行)。示例:1)鼠标左键单击图表上的任意位置2)按住此键的同时,从窗格创建一条线的第一个点3)仍然按住并拖动一条线,然后创建一条线:这意味着鼠标事件必须从窗格传输到另一条线