15 votes

Mettre l'accent sur un champ de texte

J'ai une application développée dans Netbeans et je veux mettre l'accent sur un certain élément. jTextField lorsqu'un panneau est affiché. J'ai lu un certain nombre de messages et j'ai essayé plusieurs méthodes, mais aucune n'a fonctionné. L'un des principaux problèmes est de savoir où placer le code requis, qui, dans mon cas, est le suivant this.txtMessage.requestFocusInWindow();

Certains messages indiquent l'utilisation d'un Window Listener, mais comme Netbeans a généré l'interface graphique, je ne vois pas comment mettre en œuvre les interfaces car je ne peux pas modifier le code qui crée le jPANEL, etc. Tout cela est très frustrant et je ne pense vraiment pas que cela devrait être si difficile.

À titre de test, j'ai ajouté le requestFocusInWindow(); à un bouton sur le panneau et il a mis le focus sur l'entrée désirée.

19voto

chvck Points 354

J'ai eu un scénario similaire où j'avais besoin de mettre le focus sur une zone de texte dans un panneau lorsque le panneau était affiché. Le panneau était chargé au démarrage de l'application, je ne pouvais donc pas mettre le focus dans le constructeur. Comme le panneau n'était pas chargé ou ne recevait pas le focus à l'affichage, cela signifiait que je n'avais pas d'événement pour déclencher la demande de focus.

Pour résoudre ce problème, j'ai ajouté une méthode globale à ma méthode principale qui appelait une méthode dans le panneau qui invoquait requestFocusInWindow() sur la zone de texte. Je place l'appel à la méthode globale dans le bouton qui affiche le panneau, après l'appel au spectacle. Cela signifie que le panneau sera affiché et que la zone de texte recevra le focus après l'affichage du panneau. J'espère que cela a du sens et que cela vous aidera !

En outre, vous pouvez modifier la plupart du code généré automatiquement en cliquant avec le bouton droit de la souris sur l'objet dans la vue de conception et en sélectionnant personnaliser le code, mais je ne pense pas que cela vous permette de modifier les panneaux.

13voto

Riaan Cornelius Points 1049

Je ne sais pas si je manque quelque chose ici, mais il n'y a aucune raison pour que vous ne puissiez pas ajouter un écouteur à votre panneau.

Dans Netbeans, il suffit d'appuyer sur le bouton "Source" en haut à gauche de la fenêtre de l'éditeur et vous pouvez modifier la plupart du code. Le code de mise en page proprement dit est pour l'essentiel verrouillé, mais vous pouvez même le personnaliser si vous en avez besoin.

Pour autant que je sache, txtMessage.requestFocusInWindow() est censé définir le focus par défaut lorsque la fenêtre s'affiche pour la première fois. Si vous souhaitez demander le focus après que la fenêtre ait déjà été affichée, vous devez utiliser la commande txtMessage.requestFocus()

Pour les tests, vous pouvez simplement ajouter un écouteur dans le constructeur :

addWindowListener(new WindowAdapter(){ 
  public void windowOpened( WindowEvent e){ 
    txtMessage.requestFocus();
  } 
});

6voto

Igor Rodriguez Points 813

Dans un JFrame ou un JDialog, vous pouvez toujours écraser la méthode setVisible(), cela fonctionne bien. Je n'ai pas essayé dans un JPanel, mais cela peut être une alternative.

@Override
public void setVisible(boolean value) {
    super.setVisible(value);
    control.requestFocusInWindow();
}

2voto

J'ai joué avec ça pendant une éternité, et j'ai finalement trouvé quelque chose qui semble toujours fonctionner !

textField = new JTextField() {

    public void addNotify() {
        super.addNotify();
        requestFocus();
    }
};

2voto

Ray Saunders Points 21

Je l'ai fait en créant un événement AncesterAdded sur le textField et en demandant le focus dans la fenêtre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X