Bonjour,

J'ai un petit problème avec l'utilisation de l'auto complete decorator de swingX.
En effet, j'ai constaté il y a peu de temps que le renderer de ma combo était pris en compte uniquement dans les "valeurs possibles" affichés lorsque l'on clique sur la combo, mais pas dans l'auto complétion, ni dans la valeur sélectionnée. (la valeur sélectionnée affichée par ma combo avec l'auto complete decorator correspond à la valeur sans traitement du renderer, l'auto complétion fonctionne avec les valeurs sans traitement du renderer)

J'ai donc fait quelques recherches, et j'ai essayé d'associer un custom ObjectToStringConverter. Pour cela j'ai externalisé le traitement fait dans mon renderer, et je fais appel à ce code dans la méthode getPreferredStringForItem.
Cela a résolu une partie du problème, en effet la valeur sélectionné s'affiche correctement maintenant, mais ça ne résout pas le problème de l'auto complétion, qui ne prend toujours pas en compte les valeurs après traitement du code du renderer.

A noter que j'utilise une vieille lib de swingX (swingx-2006_10_08.jar), peut-être que ceci est un bug connu qui a été résolu depuis, mais je n'ai pas trouvé d'informations à ce sujet. (et vu que c'est un vaste projet, je n'ai pas la liberté de modifier une librairie)

Une partie du code:

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
comboValue = new JComboBox(((MSearchComboValue)model).getComboModelValue());
comboValue.setRenderer(createRendererValue());
comboValue.setEnabled(false);
comboValue.setPreferredSize(new Dimension(0, comboValue.getPreferredSize().height));
AutoCompleteDecorator.decorate(comboValue, new ObjectToStringConverter() {
	public String[] getPossibleStringsForItem(Object arg0) {
		String preferred = getPreferredStringForItem(arg0);
		return preferred == null ? new String[0] : new String[] { preferred };
	}
	public String getPreferredStringForItem(Object item) {
		String result = null;
			try {
	        	result = VSearchComboValue.this.getText(item); // Traitement fait dans le renderer externalisé
	        } catch(Exception ex) {
	        	ex.printStackTrace();
	        }
		return result;
	}
});
J'ai constaté que l'auto complétion faisait appel à la méthode getPreferredStringsForItem, mais la valeur passait en paramètre (arg0) est null si elle ne correspond pas à l'un des items présents dans la liste avant traitement du renderer. (ce qui est problématique, vu que l'utilisateur veut saisir la chaîne présente qui ressort après traitement du renderer)

Si quelqu'un a une idée sur comment résoudre le problème, ça me serait grandement utile.

Merci bien !
Laurent.