Bonjour,
j'ai un problème avec mon combo-box qui me permet de filtrer ma base de donnée (MySQL) en saisie sur le même combo-box. En réalité cette opération de filtre marche bien avec les données déjà chargés dans le combo-box à l'ouverture de la fenêtre. Mais je souhaite pouvoir filtrer directement la base de données à travers cet combo-box puis affiché le résultat dans la liste déroulante qui diminue progressivement. Je ne sais pas comment le faire.
Voici mon code actuel :
- la classe de combo filter :- son usage dans un combo-box :
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74 public class MyFilterComboBox extends JComboBox<String> { private final List<String> dataList; final private List<String> filteredDataList = new ArrayList<>(); public MyFilterComboBox(List<String> list) { super(); this.dataList = list; for (String str : dataList) { addItem(str); } setEditable(true); final JTextField textfield = (JTextField) this.getEditor().getEditorComponent(); textfield.addKeyListener(new KeyAdapter() { @Override public void keyTyped(KeyEvent e) { changeFilter(textfield); } }); } private void changeFilter(JTextField textfield) { final String textEntered = textfield.getText(); filterList(textEntered); updatePopup(textEntered); } public void filterList(final String enteredText) { this.cleanFilteredDataList(); this.fillFilteredDataList(enteredText); } private void cleanFilteredDataList() { filteredDataList.clear(); } private void fillFilteredDataList(final String enteredText) { final int textSize = enteredText.length(); for (int i = 0; i < dataList.size(); i++) { final String itemCurrent = dataList.get(i).toLowerCase(); if (itemCurrent.length() < textSize) { continue; } if (itemCurrent.substring(0, textSize).compareTo(enteredText.toLowerCase()) == 0) { filteredDataList.add(dataList.get(i)); } } } public void updatePopup(final String enteredText) { if (filteredDataList.size() > 0) { this.setModel(new DefaultComboBoxModel(filteredDataList.toArray())); this.setSelectedItem(enteredText); this.showPopup(); } else { this.hidePopup(); } } }- le chargement de la base :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 JComboBox cmbNomCli = new MyFilterComboBox(populateArray()); cmbNomCli.setBounds(89, 88, 202, 21); contentPane.add(cmbNomCli); getContentPane().add(cmbNomCli);Merci pour vous aide.
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 public List<String> populateArray() { final List<String> test = new ArrayList<>(); String code = null; MetierImpl metier = new MetierImpl(); List<Client> client = metier.ConsulterListNomClient(""); test.add(""); //test.add("Actualiser"); for (int i = 0; i < client.size(); i++) { code = client.get(i).getNomCli() + ' ' + client.get(i).getPrenomCli()+' '+client.get(i).getCodeCli(); codeCli=client.get(i).getCodeCli(); adresseCli=client.get(i).getQuartierCli()+" Tel: "+client.get(i).getTelCli(); test.add(code); } return test; }
Partager