Bonjour,
j'ai une appli dans laquelle il y a multiple JComboBox.
Lorsque l'user va dans une de ces JCB (pour JCombobox) il y a un popup qui s'affiche.
Ce popup prends comme valeur le resultat d'une requette SQL.
Jusque là pas de probleme..

Mais je veux que lorsque l'user tappe quelque chose dans la JCB que le contenu du popup change.

en bidouillant je suis parvenu a quelque chose, mais le resultat ne me plais pas et c'est un code long et loin d'etre optimisé et plus ya des bugs..

donc je voulais savoir si ya pas quelqu'un qui sait comment je peux faire...


voici une partie de mon code :


une fois mon appli chargé, je passe tous mes JCB par cette fonction :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
    private static void comboRemplis(JComboBox jcb,String element){
        ComboKey(jcb,element);
        ComboFocus(jcb,element);
    }
et voici les fonctions :

/*
*comboKey permet de rajouter un keyListiner à une combobox
*/
private static void ComboKey(final JComboBox jcb, final String el){
final JTextComponent editor=(JTextComponent)jcb.getEditor().getEditorComponent();

if(loaded)
editor.setDoubleBuffered(true);

editor.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
}
public void keyReleased(java.awt.event.KeyEvent evt) {
//posi= editor.getCaretPosition();
if(evt.getKeyCode()==evt.VK_DELETE){
if(posi!=xbox.length()){
System.out.println(xbox.substring(0,posi));
System.out.println(xbox.substring(posi+1));
xbox=xbox.substring(0,posi)+xbox.substring(posi+1);
}
}
if(evt.getKeyCode()==evt.VK_RIGHT){
if(posi<xbox.length()){
posi=posi++;
change=true;
}else
change=false;
}else if(evt.getKeyCode()==evt.VK_LEFT){
if(posi>0){
posi=posi--;
change=true;
}
}
System.out.println("posi " + posi);
if(change)
editor.setCaretPosition(posi);
jcb.setPopupVisible(true);
if(evt.getSource()==txtDate.getEditor().getEditorComponent())
menu.dateNaissanceCompletion(jcb,evt);
if(evt.getKeyCode()==10){
jcb.setPopupVisible(false);
//permet de virer l'espace de fin s'il y en a un
if(jcb.getSelectedItem().toString().charAt(jcb.getSelectedItem().toString().length()-1)==' ')
jcb.setSelectedItem(jcb.getSelectedItem().toString().substring(0,jcb.getSelectedItem().toString().length()-1));
//le traitement continu
if(evt.getSource()==txtVille.getEditor().getEditorComponent()){
remplisCP(jcb,txtCP);
}
if(evt.getSource()==txtNom.getEditor().getEditorComponent()){
if(membreExiste()==0){
existeSaison=false;
existe=false;
}
}
if(evt.getSource()==txtPrenom.getEditor().getEditorComponent()){
if(membreExiste()==0){
existeSaison=false;
existe=false;
}
}
if(evt.getSource()==txtDate.getEditor().getEditorComponent())
if(membreExiste()!=0){
remplirMembreExistant(membreExiste());
ajout=true;
//modif=false;
regl=0;
if(jrEnfant.isSelected())
activeZoneTxtResp(true);
}else{
existeSaison=false;
existe=false;
}
jcb.transferFocus();
}
if(jcb.getItemCount()==0)
jcb.setPopupVisible(false);
}
public void keyTyped(java.awt.event.KeyEvent evt){

if((evt.getKeyChar()!=evt.VK_LEFT)&&(evt.getKeyChar()!=evt.VK_RIGHT)&&(evt.getKeyChar()!=evt.VK_UP)&&(evt.getKeyChar()!=evt.VK_DOWN)&&(evt.getKeyChar()!=evt.VK_PAGE_UP)&&(evt.getKeyChar()!=evt.VK_PAGE_DOWN)&&(evt.getKeyChar()!=evt.VK_INSERT)&&(evt.getKeyChar()!=evt.VK_END)&&(evt.getKeyChar()!=evt.VK_TAB)&&(evt.getKeyChar()!=evt.VK_BACK_SPACE)&&(evt.getKeyChar()!=evt.VK_DELETE)){

if(jcb.getEditor().getItem().toString().compareTo("")==0){
xbox=""+evt.getKeyChar();

} else{
if(!change){
xbox=jcb.getEditor().getItem().toString()+evt.getKeyChar(); //xbox= jcb.getSelectedItem().toString()+ evt.getKeyChar();
} else{
xbox=xbox.substring(0,posi)+evt.getKeyChar()+xbox.substring(posi);
change=true;
posi++;
}
}
if(xbox.endsWith("\n"))
xbox=xbox.substring(0,xbox.length()-1);
} else{
if((evt.getKeyChar()==evt.VK_BACK_SPACE)&&(xbox.length()>0)){
if(!change)
xbox = xbox.substring(0,xbox.length()-1);
else{
xbox=xbox.substring(0,posi-1)+xbox.substring(posi);
posi--;
if(posi<=0 && xbox.length()==0){
posi=0;
change=false;
xbox="";
}
}
}
}
jcb.setSelectedItem(xbox);
menu.remplisZoneDeroule(jcb,RequetteMembre(el),xbox);
if(change)
editor.setCaretPosition(posi);
evt.consume();
}
});
}
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
private static void ComboFocus(final JComboBox jcb,final String e1){
        jcb.getEditor().getEditorComponent().addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                String x="";
                if(jcb.getSelectedItem()!=null)
                    x = jcb.getSelectedItem().toString();
                xbox=x;
                String re=RequetteMembre(e1);
                menu.remplisZoneDeroule(jcb,re,"");
                jcb.setSelectedItem(x);
                if((e1.compareToIgnoreCase("tel1")==0)&&ajout){
                    activeZoneTxtResp(true);
                    copieDonnees();
 
                }
                if(evt.getSource()==txtPrenom.getEditor().getEditorComponent())
                    txtNom.setSelectedItem(menu.majuscule(txtNom.getSelectedItem().toString()));
                else if(evt.getSource()==txtPrenomR.getEditor().getEditorComponent())
                    txtNomR.setSelectedItem(menu.majuscule(txtNomR.getSelectedItem().toString()));
                else if (evt.getSource()==txtDate.getEditor().getEditorComponent())
                    txtPrenom.setSelectedItem(menu.minuscule(txtPrenom.getSelectedItem().toString()));
                else if (evt.getSource()==txtAdR.getEditor().getEditorComponent())
                    txtPrenomR.setSelectedItem(menu.minuscule(txtPrenomR.getSelectedItem().toString()));
                else if (evt.getSource()==txtCP.getEditor().getEditorComponent())
                    txtVille.setSelectedItem(menu.majuscule(txtVille.getSelectedItem().toString()));
                else if (evt.getSource()==txtCPR.getEditor().getEditorComponent())
                    txtVilleR.setSelectedItem(menu.majuscule(txtVilleR.getSelectedItem().toString()));
 
            }
            public void focusLosted(java.awt.event.FocusEvent evt){
 
            }
        });
    }
comme dit c'est long, mal codé et pas clair (j'ai passé les commentaire et voila le resultat )

en plus ca merde quand :
l'user utilise la touche DEL (avec backspace ca fonctionne)
l'user change le caret avec la souris
l'user selectionne du texte pour remplacer

bref total usine à gaz

si quelqu'un peut m'aider meme si je dois abondonné mon code je suis TOTALEMENT pour !