J'ai quelques TextField
s dans mon Frame
. Je veux savoir quel TextField
a actuellement le focus. Comment puis-je trouver cette information?
JFrame.getFocusOwner()
(hérité de Window.getFocusOwner()
) doit renvoyer une référence au composant ayant le focus. getMostRecentFocusOwner()
pourrait également présenter un intérêt.
KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()
Regardez aussi le javax.swing.FocusManager
getFocusOwner () renverra le composant enfant actuellement ciblé.
Mais vous devez vérifier si c'est un JTextField. D'autres composants, tels que les boutons, peuvent être ciblés s'ils existent également dans votre cadre.
KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()
;
ne fonctionnera pas sur les threads. Donc, si votre application appelle un nouveau thread et que ce thread a son propre cadre/fenêtre, etc., il ne pourra pas obtenir le propriétaire du focus de ce thread. Utilisez plutôt: KeyboardFocusManager.getCurrentKeyboardFocusManager().getGlobalFocusOwner();
Ce tutoriel devrait être très utile pour comprendre le focus.
Chaque JComponent a une méthode hasFocus que vous pouvez utiliser pour vérifier si elle a le focus. Cependant, cela a été modifié et vous devez maintenant utiliser isFocusOwner.
Alors parcourez tous les champs de texte de votre cadre et vérifiez si chacun d’entre eux est isFocusOwner en appelant cette méthode.
Vous pouvez également obtenir le propriétaire de la focalisation à travers le cadre.
Vous pouvez également écouter le changement de propriété approprié dans le gestionnaire de focus du clavier:
KeyboardFocusManager.getCurrentKeyboardFocusManager().addPropertyChangeListener("focusOwner", new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
System.out.println(evt.getNewValue());
}
});
Cela génère le propriétaire du focus lorsque vous interagissez avec les composants Swing et est utile pour le débogage des problèmes de focus en général.