Bonjour à tous,

Voici en quelques mots mon petit souci. J'utilise un JFormattedTextField avec un DecimalFormat. Sur le FormattedTextField, je désire capter les événements du type Document. Donc j'ai déclaré un DocumentListener.

Mon problème est que lorsque le JFormattedTextField gagne le focus (par le clavier avec la touche TAB, ou par la souris), un événement removeUpdate suivi d'un insertUpdate sont déclenchés. Comment éviter de déclencher, ou de filtrer, ces deux événements indésirables (puisque l'utilisateur n'a à ce moment là encore rien effacé, ou inséré).

Voici un code test:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public class MultipleSelectionNumber_simple {
 
  // [... code exécutable ...]
 
  /**
   * Tester class...
   */
  public static class Tester implements DocumentListener {
 
    public void init() {
      JFrame frame = new JFrame("Demo - MultipleSelection");
 
      JPanel panel = new JPanel();
      Box b = Box.createVerticalBox();
 
      // Only to prevent the selection of the formattedTextField
      JTextField txtField = new JTextField();
      b.add(txtField);
 
      // Example with a JFormattedTextField
      DecimalFormat numberFormat = new DecimalFormat();
      JFormattedTextField forTxtField = new JFormattedTextField(numberFormat);
      forTxtField.setValue(10);
      forTxtField.getDocument().addDocumentListener(this);
      b.add(forTxtField);
 
      panel.add(b);
 
      frame.add(panel);
      frame.pack();
      frame.show();
    }
 
    public static void main(String[] args) {
      Tester t = new Tester();
      t.init();
    }
 
    public void insertUpdate(DocumentEvent e) {
      System.out.println("insertUpdate");
    }
 
    public void removeUpdate(DocumentEvent e) {
      System.out.println("removeUpdate");
    }
 
    public void changedUpdate(DocumentEvent e) {
      System.out.println("changedUpdate");
    }
  }
}
Pour reproduire le problème, il suffit d'exécuter le code, puis de ''focuser'' le deuxième champs. Vous devriez avoir tout de suite un System.out.println("removeUpdate") et suivi d'un System.out.println("insertUpdate").

A noté que j'utilise la version de la JVM 1.6.0_02

Merci d'avance de vos propositions