Focus sur JComboBox

Résolu
Pimousse77 Messages postés 42 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 6 janvier 2005 - 21 déc. 2004 à 12:14
Pimousse77 Messages postés 42 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 6 janvier 2005 - 22 déc. 2004 à 14:44
Bonjour à tous,

je me permet de requérir votre aide car je suis tombé sur un os !
Je suis en train de travailler sur un JTable dans lequel j'ai mis des JComboBox, et il se trouve que pour l'instant lorsque l'on n'édite pas les cellules, qu'on est simplement en mode sélection, si l'on appuie sur une touche alphanumérique du clavier, on passe directement en mode édition.

Alors pour les champs "classiques" de type JTextField, il n'y a pas de problème, si on appuie sur une touche alpha numérique, la cellule passe automatiquement en mode édition et la lettre appuyée est saisie dans le JTextField. En revanche, pour les ComboBox, on passe bien en mode édition, mais la lettre tapée n'est pas saisie. Du coup quand on tape vite, il manque toujours la première lettre de chaque mot.

Quelqu'un a t'il une idée de la manière de résoudre celà ?
Je ne sais vraiment plus quoi faire.

Merci d'avance,

Thibaut

4 réponses

Pimousse77 Messages postés 42 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 6 janvier 2005
22 déc. 2004 à 14:44
En, fait j'ai fait comme ça parcequ'il faut aussi que ça marche pour des ^$*%ù!:@ :

String.valueOf(ke.getKeyChar()).matches("\\p{Graph}")

En tout cas merci à toi de m'avoir répondu si rapidement c'est super sympa.
3
Madvin Messages postés 123 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 26 août 2012 3
21 déc. 2004 à 16:03
Salut,

tu pourrais peut-être essayer de gérer ça de la façon suivante :

Lorsqu'un Combo n'a pas le focus et qu'une touche du clavier est appuyée, tu récupères l'événement (KeyPressed() dans KeyListener) et tu lui fais appeler une méthode donnerFocusCombo(JComboBob combo,char carac) qui insère le charactère carac dans la combo et qui lui donne le focus(paramètres : combo la JComboBox qui doit prendre le focus, et carac le caractère correspondant à la touche qui a été appuyée).

Voici un petit bout de code pour être plus explicite :

Dans le KeyListener de l'objet à partir duquel tu veux accéder à une combobox. (apparemment chez toi c'est à partir d'une cellule de la JTable) :
public void keyPressed(KeyEvent e)
{
....
....//combo est la JComboBox devant prendre le focus.
....
donnerFocusCombo(combo,e.getKeyChar());
}


Et voici une implémentation de la méthode donnerFocusCombo() :
public void donnerFocusCombo(JComboBox c,char carac)
{
     ComboBoxEditor editor = c.getEditor();
     Object obj = editor.getItem();

     if (obj.getClass().equals(String.class))
     {
         String str = (String)obj;
         str+=carac;
         editor.setItem(str);
     }

c.requestFocus();

}


A toi de modifier cette méthode en fonction de ce que tu veux comme comportement, mais je t'ai indiqué en gros la marche à suivre.

Voilà la méthode que je te propose. Si ça te convient... :)

@++
0
Pimousse77 Messages postés 42 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 6 janvier 2005
22 déc. 2004 à 10:45
Ta réponse correspond à peu près à ce que j'avais l'intention de faire, seulement tu as oublié une donnée sur laquelle je n'ai pas assez appuyé : je ne veux commencer la saisie dans la cellule QUE si la touche du clavier pressée est une touche alphanumérique !!

Et c'est là que se pose mon problème, comment savoir si la touche appuyée correspond à un caractère alphanumérique ??
0
Madvin Messages postés 123 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 26 août 2012 3
22 déc. 2004 à 13:19
Ci-fait :

public void keyPressed(KeyEvent e)
{
if (Character.isLetterOrDigit(e.getKeyChar()))
donnerFocusCombo(combo,e.getKeyChar());
}


Voilà. :)

@++
0
Rejoignez-nous