Bonjour

j'ai hésité à poster le message ici ou dans le forum consacrés aux textcomponent...

Bref j'ai un tableau qui presente des degres DMS, j'ai donc voulu faire une saisie formatee en utilisant un MaskFormatter:

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
52
53
54
55
56
57
58
59
60
 
/** un Editor specialise pour pouvoir saisir des degres DMS
 * utilise un JFormattedTextfield du mieux que je peux.*/
private class DmsCellEditor extends AbstractCellEditor implements
			TableCellEditor
 
{
 
	private JFormattedTextField _ftf;
 
	private String _validChars;
 
	public DmsCellEditor(String validChars) {
		super();
		_validChars = validChars;
 
	}
 
	public Component getTableCellEditorComponent(JTable table,
			Object value, boolean isSelected, int row, int column) {
 
		String texte = GeoUtil.Deg2DMS((Double) value, column == 0);
 
		try {
			//creation du formatter
			MaskFormatter formatter = new MaskFormatter("U ###°##''##''''");
		formatter.setValidCharacters("0123456789".concat(_validChars));
		formatter.setAllowsInvalid(false);
		formatter.setPlaceholderCharacter('_');
		//creation du textfield
		//TODO deplacer la creation dans le constructeur
		// mais alors on retrouve d'anciennes valeurs saisies, c'est le boxon
		_ftf = new JFormattedTextField(formatter);
		_ftf.setText(texte);
		_ftf.setFocusLostBehavior
			(JFormattedTextField.COMMIT_OR_REVERT);
 
		// pour avoir le caret mis au debut en cas d'activation par le clavier.
		_ftf.setCaretPosition(0);
		//et un bord semblable à celui de l'éditeur par defaut
		_ftf.setBorder(new LineBorder(Color.black));
		} catch (ParseException e) {
			e.printStackTrace();
		}
 
			return _ftf;
		}
 
		public Object getCellEditorValue() {
			String value;
 
			value = (String) _ftf.getText();
 
			return GeoUtil.Dms2Deg(value);
		}
 
 
 
 
	}

comme vous pouvez le voir je cree le JFormattedTextField à chaque appel à getTableCellEditorComponent. C'est pas terrible et j'aurais bien voulu le faire une fois pour toute dans le constructeur, mais quand j'essaie je retrouve d'anciennes valeurs saisies quand j'appuie sur escape, c'est un peu pourri.
Est-ce malgré tout acceptable?
Est-ce un problème connu, lié à l'utilisation d'un JFormattedTextField dans un tableau, ou juste lié au JFormattedTextField? Si oui y a t'il un contournement?

Merci