IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

Filtre de la base de donnée et affiché le résultat dans la liste déroulante de Combo-box


Sujet :

Composants Java

  1. #1
    Membre du Club
    Homme Profil pro
    Economiste
    Inscrit en
    Décembre 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Bénin

    Informations professionnelles :
    Activité : Economiste
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2016
    Messages : 114
    Points : 63
    Points
    63
    Par défaut Filtre de la base de donnée et affiché le résultat dans la liste déroulante de Combo-box
    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.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Comores

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 21
    Points : 25
    Points
    25
    Par défaut
    Pouvez vous être un peut explicite sur )a "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"? stp!
    Merci d'avance.

  3. #3
    Membre du Club
    Homme Profil pro
    Economiste
    Inscrit en
    Décembre 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Bénin

    Informations professionnelles :
    Activité : Economiste
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2016
    Messages : 114
    Points : 63
    Points
    63
    Par défaut
    Merci pour l'intérêt que vous portez à cette discussion.
    J'aimerais pouvoir filtrer le nom des clients de ma base de donnée en saisissant le combo-box. Présentement j'arrive à le fait mais pas correctement.
    Mon problème est que, lorsque j'ajouter un nouveau client dans la base je ne retrouve pas ses informations dans la liste déroulante du combo-box. Il me faut fermé la fenêtre recherche puis la ré-ouvrir avant que l'informations du client ne s'affiche.
    D'après mes analyses, j'ai constaté que la liste des clients existant dans la base est précharge dans le combo-box qui permet de faire le filtre en liste déroulante. Du coup les nouveaux enregistrement ne sont pas encore prise en compte.
    Je demande donc comment faire pour que le combo-box prend en compte les nouveaux enregistrement sans forcement fermé et ré-ouvrir la fenêtre.
    Merci.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Comores

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 21
    Points : 25
    Points
    25
    Par défaut
    Si je comprend bien, ton but c'est de mettre à jour le combo box une fois validé un enregistrement.
    si c'est le cas procédé comme suit.
    sur le méthode d'enregistrement des donnée (méthode du Listener du bouton d'enregistrement):
    -Initialiser le combo box en supprimant tous ces enregistrements via removeAll() avant ton code d'enregistrement,
    -Après ton code d'enregistrement,
    tu rajoute ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    JComboBox cmbNomCli = new MyFilterComboBox(populateArray());
     
    		cmbNomCli.setBounds(89, 88, 202, 21);
    		contentPane.add(cmbNomCli);
    		getContentPane().add(cmbNomCli);
    si vous ne parvenez pas à faire, merci d'envoyer ta portion de code sur ta méthode d'enregistrement!!!!!

  5. #5
    Membre du Club
    Homme Profil pro
    Economiste
    Inscrit en
    Décembre 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Bénin

    Informations professionnelles :
    Activité : Economiste
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2016
    Messages : 114
    Points : 63
    Points
    63
    Par défaut
    J'ai déjà essayé cette méthode là. Mais problème est que je faire l'enregistrement à partir d'une fenêtre différent de celle où je faire la recherche.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Comores

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 21
    Points : 25
    Points
    25
    Par défaut
    si c'est le cas, il faut toujours rappeler la fenêtre de rechercher une fois valider l'enregistrement.
    après ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    JComboBox cmbNomCli = new MyFilterComboBox(populateArray());
     
    		cmbNomCli.setBounds(89, 88, 202, 21);
    		contentPane.add(cmbNomCli);
    		getContentPane().add(cmbNomCli);
    new Recherche().setVisible(true);

  7. #7
    Membre du Club
    Homme Profil pro
    Economiste
    Inscrit en
    Décembre 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Bénin

    Informations professionnelles :
    Activité : Economiste
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2016
    Messages : 114
    Points : 63
    Points
    63
    Par défaut
    Ça a marché. Mais ça ouvre plusieurs fenêtres à chaque enregistrement. Ce qui est vilain. Comment je peut faire pour que je n'ai qu'aucune seule fenêtre ouverte à la foie. Merci pour votre.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Comores

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 21
    Points : 25
    Points
    25
    Par défaut
    pour fermer l'interface en cours et ouvrir une autre procédé comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    JComboBox cmbNomCli = new MyFilterComboBox(populateArray());
     
    		cmbNomCli.setBounds(89, 88, 202, 21);
    		contentPane.add(cmbNomCli);
    		getContentPane().add(cmbNomCli);
    //utiliser cette méthode
    setVisible(false);
    //ou celle ci qui est plus conseillée.
    setDefaultCloseOperation(HIDE_ON_CLOSE);     
     
    new Recherche().setVisible(true);
    la méthode utilisée peut être en dessous ou en dessus du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    new Recherche().setVisible(true);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] afficher 2 résultats d'une liste déroulante ?
    Par fragglerick dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 07/12/2011, 12h45
  2. données d'une feuille à mettre dans une liste déroulante
    Par vinc44 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/02/2010, 20h06
  3. [MySQL] Comment afficher des éléments dans une liste déroulante tout en dissimulant un ?
    Par lou87 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/04/2009, 16h45
  4. [MySQL] Afficher 2 champs dans une liste déroulante
    Par estef77 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 31/01/2009, 19h09
  5. Afficher des informations dans une liste déroulante
    Par onlytime dans le forum Langage
    Réponses: 1
    Dernier message: 08/03/2008, 18h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo