Bonjour,

Je cherche à reproduire en java le comportement de la calculatrice Windows pour les nombres hexadécimaux: filtrage à la volée des caractères qui ne sont pas hexa, et formatage à la volée (regroupement des chiffres par 4).

En utilisant un JTextField pour lequel j'override le PlainDocument, j'ai la première partie de mon objectif: je rejette les caractères indésirables (j'en profite pour mettre les lettres a-f en majuscules).

Code java :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
        jFormattedTextField1 = new javax.swing.JFormattedTextField();
        jTextField1.setDocument(new HexDocument());
 
        (...)
class HexDocument extends PlainDocument {
 
        @Override
        public void insertString(int offs, String str, AttributeSet a)
                throws BadLocationException {
        // my code here
        }
 
 
    }

Par contre, je ne maitrise pas le formatage de mon texte. L'objet str en argument de insertString ci dessus ne comporte que le dernier caractère saisi (ou bien le presse papier si j'ai fait un copier coller), je ne parviens pas à avoir accès à la valeur complète du champ pour la mettre en forme.


L'autre solution est d'utiliser un JFormatedTextField, pour lequel j'ai fabriqué mon petit FormatterFactory. Là, j'ai bien accès à la valeur complète du champ, mais le traitement n'a lieu que lorsque le JFormatedTextField perd le focus... et non pas à la volée...

Avez vous une idée pour mêler les avantages des deux composants?

Merci d'avance,

Valère