samer@0: /* samer@0: * MouseRetarget.java samer@0: * samer@0: * Copyright (c) 2000, Samer Abdallah, King's College London. samer@0: * All rights reserved. samer@0: * samer@0: * This software is provided AS iS and WITHOUT ANY WARRANTY; samer@0: * without even the implied warranty of MERCHANTABILITY or samer@0: * FITNESS FOR A PARTICULAR PURPOSE. samer@0: */ samer@0: samer@0: package samer.core.util; samer@0: import java.awt.*; samer@0: import java.awt.event.*; samer@0: samer@0: samer@0: /** samer@0: This is a mouse event handler that makes samer@0: a component effectively invisible to samer@0: mouse clicks by routing a events through samer@0: to the parent container. samer@0: */ samer@0: samer@0: public class MouseRetarget extends MouseAdapter samer@0: { samer@0: private void retarget(MouseEvent e) samer@0: { samer@0: if (!e.isConsumed()) { // no point otherwise samer@0: Component c=e.getComponent(); samer@0: Component parent=c.getParent(); samer@0: samer@0: if (parent!=null) { samer@0: Point origin=c.getLocation(); samer@0: samer@0: // Must make new event look as if it samer@0: // was generated by parent samer@0: samer@0: MouseEvent ee = new MouseEvent( samer@0: parent, samer@0: e.getID(), samer@0: e.getWhen(), samer@0: e.getModifiers(), samer@0: e.getX() + origin.x, samer@0: e.getY() + origin.y, samer@0: e.getClickCount(), samer@0: e.isPopupTrigger()); samer@0: samer@0: parent.dispatchEvent(ee); samer@0: } samer@0: } samer@0: } samer@0: samer@0: public void mouseClicked(MouseEvent e) { retarget(e); } samer@0: public void mousePressed(MouseEvent e) { retarget(e); } samer@0: public void mouseReleased(MouseEvent e) { retarget(e); } samer@0: samer@0: // This one static object can handle all the mouse samer@0: // event redirection for everyone samer@0: samer@0: public static final MouseListener listener=new MouseRetarget(); samer@0: public static void mouseInvisibilityFor(Component c) { samer@0: c.addMouseListener(listener); samer@0: } samer@0: } samer@0: samer@0: samer@0: