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 :
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();
		}
	}
}
- son usage dans un combo-box :
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);
- le chargement de la base :
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;
	}
Merci pour vous aide.