Идентифицировать компонент Swing по определенной экранной координате? (И отправка вручную MouseEvents) - PullRequest
11 голосов
/ 29 апреля 2010

Я работаю над тем, чтобы сделать приложение Java совместимым с альтернативными устройствами ввода. К сожалению, у рассматриваемого устройства есть Java API, который сейчас едва ли находится в стадии альфа, поэтому он довольно беден. Что мне нужно сделать, так это настроить структуру замены для отправки MouseEvents. Кто-нибудь знает, есть ли способ в Swing взять экранную координату и выяснить, какой компонент Swing отображается сверху в этой точке экрана?

Ответы [ 3 ]

15 голосов
/ 29 апреля 2010

В контейнере AWT, назовите это ...

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

т.е. Если это в стеклянной панели ...

  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;
  }

Читая ваш вопрос, это может быть полезным и вам ...

Если вы хотите применить контроль, используйте это ... Класс Java.awt.Robot используется для управления мышью и клавиатурой. После того, как вы получите элемент управления, вы можете выполнять любые типы операций, связанных с мышью и клавиатурой, с помощью своего Java-кода. Этот класс используется в основном для автоматизации тестирования.

5 голосов
/ 08 августа 2014

Альтернатива (может потребоваться дальнейшая настройка):

public static Component findComponentUnderMouse() {
    Window window = findWindow();
    Point location = MouseInfo.getPointerInfo().getLocation();
    SwingUtilities.convertPointFromScreen(location, window);
    return SwingUtilities.getDeepestComponentAt(window, location.x, location.y);
}

private static Window findWindow() {
    for (Window window : Window.getWindows()) {
        if (window.getMousePosition(true) != null)
            return window;
    }

    return null;
}
0 голосов
/ 22 февраля 2019

взять координаты экрана компонента в Swing вы можете методом getLocationOnScreen ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...