2009-04-06 22 views

Respuesta

29

JFrame.getFocusOwner() (heredado de Window.getFocusOwner()) debería devolver una referencia al componente con el foco. getMostRecentFocusOwner() también podría ser de interés.

1

This tutorial debe ser bastante útil para comprender el enfoque.

0

Cada JComponent tiene un método hasFocus que puede usar para comprobar si tiene foco. Sin embargo, esto ha cambiado, y ahora debe usar isFocusOwner.

Por lo tanto, ejecute todos los campos de texto en su marco, y compruebe en cada uno de ellos si se isFocusOwner llamando a ese método.

También puede obtener el propietario del foco a través del marco.

+7

Parece muy ineficiente. Simplemente puede llamar a KeyboardFocusManager.getCurrentKeyboardFocusManager(). GetFocusOwner(); –

2

getFocusOwner() devolverá el componente secundario que está actualmente enfocado.

Pero debes comprobar si se trata de un JTextField. Otros componentes, como los botones, pueden centrarse si también existen en tu marco.

23
KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() 
+1

Mucho mejor que la respuesta aceptada, en mi humilde opinión, ya que puedo hacer esto desde una clase estática que no tiene acceso a la ventana que estoy usando, y no tengo que recorrer todas las ventanas. –

1

KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
no funciona a través de subprocesos. Entonces, si su aplicación invoca un nuevo hilo y ese hilo tiene su propio marco/ventana, etc., entonces no podrá obtener el propietario del foco de ese hilo. En su lugar use: KeyboardFocusManager.getCurrentKeyboardFocusManager().getGlobalFocusOwner();

+0

de acuerdo, leer el documento de api ayuda (yo :-) a entender lo que puede significar. Indica que _Returna el propietario del foco, incluso si el hilo de llamada se encuentra en un contexto diferente al del propietario del foco_ - no se puede utilizar en el código de la aplicación, sin embargo, porque su alcance está protegido. Se usa internamente ... – kleopatra

+1

Swing es un entorno de subproceso único, todas las interacciones de UI DEBEN ocurrir dentro del contexto del subproceso de distribución de eventos, es imposible tener dos ventanas dentro de la misma JVM que operen en diferentes subprocesos, así no es como API funciona – MadProgrammer

Cuestiones relacionadas