Я делаю некоторую работу, делая приложение Java совместимым с альтернативными устройствами ввода. К сожалению, у данного устройства есть Java API, который едва ли находится в альфа-стадиях прямо сейчас, поэтому он довольно беден. Что мне нужно сделать, так это создать структуру замещения для отправки MouseEvents. Кто-нибудь знает, есть ли способ в Swing взять координату экрана и узнать, какой компонент Swing отображается сверху на этом экране?
Идентификация компонента Swing на определенной координате экрана? (И ручная отправка MouseEvents)
Ответ 1
В контейнере AWT вызовите это...
findComponentAt(int x, int y)
Locates the visible child component that contains the specified position
то есть. Если он находится в 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;
}
Считывая ваш вопрос, это может помочь вам также...
Если вы хотите использовать элемент управления, используйте это... Класс Java.awt.Robot используется для управления мышью и клавиатурой. Как только вы получите элемент управления, вы можете выполнять любой тип операций, связанных с мышью и клавиатурой, через код Java. Этот класс обычно используется для автоматизации тестирования.
Ответ 2
Альтернатива (может потребовать дополнительной настройки):
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;
}