views:

92

answers:

1

I'm doing some work making a Java app compatible with alternative input devices. Unfortunately, the device in question has a Java API that's barely into the alpha stages right now, so it's pretty poor. What I need to do is essentially set up a replacement structure for the dispatch of MouseEvents. Does anyone know if there's a way in Swing to take a screen coordinate and find out what Swing component is displayed on top at that screen point?

+2  A: 

In AWT Container, call this ...

findComponentAt(int x, int y) 
          Locates the visible child component that contains the specified position

i.e. If it is in a GlassPane...

  public static Component findComponentUnderGlassPaneAt(Point p, Component top) {
    Component c = null;

    if (top.isShowing()) {
      if (top instanceof RootPaneContainer)
        c =
        ((RootPaneContainer) top).getLayeredPane().findComponentAt(
            SwingUtilities.convertPoint(top, p, ((RootPaneContainer) top).getLayeredPane()));
      else
        c = ((Container) top).findComponentAt(p);
    }

    return c;
  }

Reading your question, this might be of help to you also...

If you want to exercise the control use this ... Java.awt.Robot class is used to take the control of mouse and keyboard. Once you get the control, you can do any type of operation related to mouse and keyboard through your java code. This class is used generally for test automation.

Romain Hippeau
Thanks! I thought there must be some API call, I just wasn't looking far enough up the ancestor tree. And hearing about the Robot class is a HUGE bonus; I had no idea anything like that existed, and there's a good chance you saved me days of work!
DVA
@DVA Thanks for the comment, The good feedback and the upvote is what keeps people answering questions. Glad to help :)
Romain Hippeau