Estoy trabajando para que una aplicación Java sea compatible con dispositivos de entrada alternativos. Desafortunadamente, el dispositivo en cuestión tiene una API de Java que apenas está en las etapas alfa en este momento, por lo que es bastante pobre. Lo que tengo que hacer es esencialmente configurar una estructura de reemplazo para el envío de MouseEvents. ¿Alguien sabe si hay una manera en Swing de tomar una coordenada de pantalla y descubrir qué componente de Swing se muestra en la parte superior en ese punto de la pantalla?¿Identifica el componente Swing en una determinada coordenada de pantalla? (Y despachando manualmente MouseEvents)
10
A
Respuesta
15
En AWT Container, llamar a este ...
findComponentAt(int x, int y)
Locates the visible child component that contains the specified position
es decir, si está en un 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;
}
La lectura de su pregunta, esto podría ser de ayuda para usted también. ..
Si desea ejercer el control, use esto ... La clase Java.awt.Robot se utiliza para tomar el control del mouse y el teclado. Una vez que obtiene el control, puede realizar cualquier tipo de operación relacionada con el mouse y el teclado a través de su código java. Esta clase se usa generalmente para la automatización de pruebas.
3
Una alternativa (puede ser necesario ajustar aún más):
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;
}
Cuestiones relacionadas
- 1. ¿Cómo puedo probar un clic en una determinada coordenada x, y?
- 2. ¿Cómo invoco manualmente una Acción en Swing?
- 3. ¿Cómo obtener un componente de una coordenada tikz/PGF?
- 4. Proyectando un punto 3D a una coordenada de pantalla 2D
- 5. Swing: ¿Crear un componente arrastrable ...?
- 6. Mover la pantalla a una posición determinada
- 7. MouseMotionListener en el componente secundario desactiva MouseListener en el componente principal
- 8. Prueba de unidades de un componente Swing
- 9. Cómo envolver un componente Swing en una aplicación JavaFX 2.0
- 10. Scala Swing: métodos JComponent que faltan en el componente
- 11. Cómo crear un Componente Swing personalizado
- 12. Swing: ¿cómo crear eventos y enviarlos a un componente?
- 13. Obtener un componente Swing por su nombre
- 14. Java (Swing): encontrar el * tamaño * de pantalla * de un componente cuando se cambia el tamaño de la ventana
- 15. ¿Hay un componente Swing para Google Maps?
- 16. Cómo exportar un componente JTable completo en pdf a una coordenada específica
- 17. Cómo implementar una aplicación Java Swing en la pantalla táctil
- 18. Calcular nueva coordenada x e y grado metros de distancia de una coordenada
- 19. Programando una aplicación de pantalla táctil con SWING
- 20. Java Swing: ¿Pantalla de carga modal?
- 21. Componente de la interfaz gráfica de usuario de Swing
- 22. Componente de explorador de archivos para Java swing
- 23. detectar si componente Swing de Java se ha ocultado
- 24. Java swing: Cómo eliminar un ActionListener anónima de un componente
- 25. Determinar si una coordenada está en el radio de otra
- 26. ¿Es posible imprimir una cadena en una determinada posición de pantalla dentro de IDLE?
- 27. Eliminar la pantalla de bienvenida manualmente en PhoneGap
- 28. Representación de componentes Swing a un buffer sin pantalla
- 29. ¿Cómo hacer que una aplicación swing sea consciente del cambio en el tamaño de la pantalla?
- 30. Swing: ¿creando un JScrollPane que muestra su componente centrado?
Gracias! Pensé que debía haber alguna llamada API, simplemente no estaba buscando lo suficiente en el árbol antepasado. Y escuchar acerca de la clase de Robot es una GRAN bonificación; No tenía idea de que existiera algo así, ¡y hay una buena posibilidad de que me salvases días de trabajo! – DVA
@DVA Gracias por el comentario, la buena respuesta y la respuesta positiva es lo que hace que las personas respondan preguntas. Encantado de ayudar :) –