我在课堂上看不到任何getSource()
方法。PInputEvent
我想获取对添加了处理程序的对象的引用。
更新
在以下示例中,创建了三个同心圆。每个较大的圆圈拥有较小的圆圈。鼠标点击处理程序附加到circle2
. 由于这个圈子拥有,处理程序在单击和circle3
时触发,但不是。circle2
circle3
circle1
如果单击,如何circle2
从处理程序中获取引用circle3
?
两种测试方法都没有帮助。
package test.piccolo;
import edu.umd.cs.piccolo.event.PBasicInputEventHandler;
import edu.umd.cs.piccolo.event.PInputEvent;
import edu.umd.cs.piccolo.nodes.PPath;
import edu.umd.cs.piccolox.PFrame;
public class App {
@SuppressWarnings("serial")
public static void main(String[] args) {
new PFrame() {
public void initialize() {
PPath circle1 = PPath.createEllipse(-50, -50, 100, 100);
circle1.setPaint(null);
System.out.println("circle1 = " + circle1.toString());
getCanvas().getLayer().addChild(circle1);
PPath circle2 = PPath.createEllipse(-40, -40, 80, 80);
circle2.setPaint(null);
System.out.println("circle2 = " + circle2.toString());
circle1.addChild(circle2);
PPath circle3 = PPath.createEllipse(-30, -30, 60, 60);
circle3.setPaint(null);
System.out.println("circle3 = " + circle3.toString());
circle2.addChild(circle3);
circle2.addInputEventListener(new PBasicInputEventHandler() {
@Override
public void mouseClicked(PInputEvent event) {
Object o;
o = event.getSourceSwingEvent().getSource().toString();
System.out.println("event.getSourceSwingEvent().getSource() = " + o);
o = event.getComponent().toString();
System.out.println("event.getComponent() = " + o);
o = event.getPickedNode().toString();
System.out.println("event.getPickedNode() = " + o);
}
});
};
};
}
}
更新 2
我的要求是将一些最顶层的虚拟节点视为其子节点的包装器。我想将处理程序附加到父级并跟踪下面的所有事件。同时,父母可以是一些更复杂场景的孩子。所以,我需要在某个中间级别捕捉事件。