Question

JTextField a un événement keyTyped mais il semble qu’au moment de son déclenchement, le contenu de la cellule n’ait pas encore changé.

A cause de cela, la longueur () est toujours fausse si elle est lue ici.

Il doit exister un moyen simple d'obtenir la longueur telle qu'elle apparaît à l'utilisateur après un appui sur une touche?

Était-ce utile?

La solution

Ce n'est probablement pas la méthode optimale (et cela fait longtemps), mais j’avais ajouté un DocumentListener à JTextField et à n’importe lequel des événements (insertion, mise à jour, suppression) I:

evt.getDocument().getLength()

Qui retourne la longueur totale du contenu du champ de texte.

Autres conseils

Cela peut être lié à ce & bug; bug " (ou plutôt "fonctionnalité")

  

Les écouteurs sont informés des événements clés avant de les traiter.   permettre aux auditeurs de "voler" les événements en les consommant. Cela donne   compatibilité avec l’ancienne notion awt d’événements consommateurs.
   Le " typé "   événement ne signifie pas que du texte a été saisi dans le composant . Ceci n'est pas un   bug, il est destiné comportement.

Une solution possible consiste à écouter un document associé

// Listen for changes in the text
myTextField.getDocument().addDocumentListener(new DocumentListener() {
  public void changedUpdate(DocumentEvent e) {
  // text was changed
}
public void removeUpdate(DocumentEvent e) {
  // text was deleted
}
public void insertUpdate(DocumentEvent e) {
  // text was inserted
}
});
  

Notez que cela fonctionne quelle que soit la manière dont le texte est modifié. via un presse-papiers couper / coller, progamatique "setText ()" sur le TextField, ou l'utilisateur qui tape dans le champ de l'interface utilisateur.

Les

KeyEvent sont des événements de bas niveau qui ne sont pas appropriés ici [cela semble familier].

Comment le système JTextField sait-il qu'un caractère a été saisi? Par le biais d’un événement à clavier (IIRC, réalisé par le biais de PL & F). L'événement est-il envoyé à l'écouteur du système avant votre écouteur? Cela pourrait ou ne pourrait pas être fait.

Dans ce cas, vous souhaiterez probablement accéder au Document et ajouter un écouteur de niveau supérieur. Avec Swing, il est judicieux d’opter pour le modèle à un stade précoce: les interfaces de la classe «J» sont incohérentes. Si vous interceptez des données d'entrée, vous souhaitez probablement un modèle personnalisé (ou dans le cas de Document un DocumentFilter ).

Utilisez ce code:

public void jTextField6KeyReleased(java.awt.event.KeyEvent evt)
{
    System.out.println(jTextField6.getText().length());
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top