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)仍然按住并拖动一条线,然后创建一条线:这意味着鼠标事件必须从窗格传输到另一条线