2009-09-12 8 views
1

Je tente de faire comme ceci: Essayez d'utiliser un écouteur de clés pour détecter chaque fois que l'utilisateur entre le texte dans le champ. Chaque fois que l'événement key est déclenché, récupérez la longueur() du texte dans JTextField. Si la longueur> = limite, désactivez l'édition. Toutefois, si vous appuyez sur la touche de suppression, supprimez le dernier caractère de JTextField et setEditable (true). Mon problème est de savoir comment supprimer le dernier caractère de JTextField? Est-ce déjà vrai? Parce que ça n'a pas marché. Merci.KeyListener (KeyPressed) ne fonctionne pas

Voici une partie de mon code:

public void keyPressed(KeyEvent evt) 
    { 
    } 
public void keyReleased(KeyEvent evt) 
    { 
     int limit = 1; 
    JTextField text = (JTextField)evt.getSource(); 
     if (text.getText().length() >= limit) 
        { text.setEditable(false); } 
     else 
      if(evt.getKeyCode() == KeyEvent.VK_BACK_SPACE) 
       { answer =""; 
        text.setEditable(true); 
         }   
    } 
public void keyTyped(KeyEvent evt) 
    { 
    } 
} 

Répondre

1

Essayez d'envelopper le gestionnaire d'événement entier dans un bloc de SwingUtilities.invokeLater.

public void keyReleased(KeyEvent evt) 
    { 
     final int limit = 1; 
     final int keyCode = evt.getKeyCode(); 
     final JTextField text = (JTextField)evt.getSource(); 

     SwingUtilities.invokeLater(new Runnable(){ 

      public void run() { 
       if (text.getText().length() >= limit) 
       { 
        text.setEditable(false); 
       } 
       else if(keyCode == KeyEvent.VK_BACK_SPACE) 
       {  
        answer =""; 
        text.setEditable(true); 
       } 
      } 
     });       
    } 

Depuis la gestion des événements et Swing GUI mises à jour sont tous deux fait sur le fil de répartition de l'événement, cela peut être nécessaire pour permettre la méthode text.getText() pour récupérer tout le texte saisi.

+0

Astuce! J'ai eu des problèmes avec ce type d'événement dans le passé et c'est la meilleure solution de contournement pour le moment. Hey, erietha, vous devriez envisager d'accepter son poste comme solution. – Jeach