2010-11-23 5 views

Répondre

2

Pourquoi voulez-vous perdre le focus? Je suis sûr qu'il y a une meilleure conception que de forcer l'utilisateur à cliquer sur la fenêtre pour que le champ de texte perd son focus. Quoi qu'il en soit, le champ de texte perd le focus lorsqu'un autre composant obtient le focus. Par défaut, un panneau ne peut pas être mis en évidence. Par conséquent, cliquer dessus ne provoque pas la perte de focus du champ de texte. Faire le panneau focalisable:

panel.setFocusable(true); 

Bien sûr, maintenant lorsque l'utilisateur utilise la touche de tabulation, le panneau sera maintenant inclus dans l'ordre de tabulation. C'est une autre raison que cela semble être un mauvais design.

+0

Je n'arrive pas à comprendre comment faire cela dans netbeans. J'ai la propriété focusable vérifiée, mais cela ne semble pas faire quoi que ce soit. Je peux essayer d'insérer le code après la création du panneau. Je veux obtenir le focus hors du champ de texte b/c après l'avoir édité, je veux pouvoir utiliser mon raccourci clavier "p" pour activer un bouton. Je suppose que je peux donner le focus au bouton quand tout le reste perd son focus. –

+1

Désolé, setFocusable() ne fonctionne que lorsque l'on passe d'un composant à un autre. Si vous utilisez la souris, vous devez ajouter un MouseListener au panneau, puis utiliser la méthode requestFocusInWindow() pour donner le focus au panneau. Maintenant, vous commencez à voir pourquoi "Alt-P" est l'approche standard pour invoquer un bouton sur le cadre. Vous ne forcez pas l'utilisateur à prendre cette étape supplémentaire de suppression du focus du champ de texte. Des entreprises comme MS ont dépensé beaucoup d'argent pour développer des interfaces graphiques viables. Chaque fois que vous quittez le design normal, vous aurez une interface utilisateur compliquée qu'un utilisateur doit apprendre. Rester simple. – camickr

0

Tenez compte de votre classe extends JFrame:

JTextField jTextField1 = new JTextField(); 

addMouseListener(new java.awt.event.MouseAdapter() { 
      public void mouseClicked(java.awt.event.MouseEvent evt) { 
       jTextField1.setFocusable(false); 
      } 
     }); 

espoir cette aide ...

Questions connexes