J'ai créé un formulaire à l'aide de Swing en Java.Dans le formulaire, j'ai utilisé un champ de texte sur lequel je dois définir le focus chaque fois que j'appuie sur la touche.Comment définir le focus sur un composant particulier dans Java =?
Est-ce que Component.requestFocus()
vous donnerait ce dont vous avez besoin?
Cela fonctionnerait ..
SwingUtilities.invokeLater( new Runnable() {
public void run() {
Component.requestFocus();
}
} );
Maintenant que nous avons recherché l'API, il nous suffit de lire l'API.
Selon la documentation de l'API:
"Parce que le comportement de focus de cette méthode dépend de la plate-forme, les développeurs sont fortement encouragés à utiliser requestFocusInWindow lorsque cela est possible."
Notez que tout ce qui précède échoue pour une raison quelconque dans un JOptionPane. Après beaucoup d'essais et d'erreurs (plus que les 5 minutes mentionnées ci-dessus, en tout cas), voici ce qui a finalement fonctionné:
final JTextField usernameField = new JTextField();
// ...
usernameField.addAncestorListener(new RequestFocusListener());
JOptionPane.showOptionDialog(this, panel, "Credentials", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, null, null);
public class RequestFocusListener implements AncestorListener {
@Override
public void ancestorAdded(final AncestorEvent e) {
final AncestorListener al = this;
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final JComponent component = e.getComponent();
component.requestFocusInWindow();
component.removeAncestorListener(al);
}
});
}
@Override
public void ancestorMoved(final AncestorEvent e) {
}
@Override
public void ancestorRemoved(final AncestorEvent e) {
}
}
Vous pouvez également utiliser JComponent.grabFocus();
c'est la même chose