web-dev-qa-db-fra.com

Comment mettre l'accent sur Textfield dans Swing?

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 =?

42
om.

Est-ce que Component.requestFocus() vous donnerait ce dont vous avez besoin?

83
phunehehe

Cela fonctionnerait ..

SwingUtilities.invokeLater( new Runnable() { 

public void run() { 
        Component.requestFocus(); 
    } 
} );
24
Rhea

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."

14
camickr

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) {
    }
}
4
Marc

Vous pouvez également utiliser JComponent.grabFocus(); c'est la même chose

3
Jeff_Alieffson