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

AWT/Swing Java Discussion :

Comment lier des JCombobox entre eux ?


Sujet :

AWT/Swing Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 15
    Points : 9
    Points
    9
    Par défaut Comment lier des JCombobox entre eux ?
    Bonjour,

    Mon probleme est simple (mais pourtant je n'arrive pas a le resoudre).

    J'ai trois données qui contiennent chacune un combobox presque avec les meme valeurs.
    Je veux qu'au changement d'un combobox, l'autre combobox prenne la valeur correspondant .
    le 1er combobox cest pour les grades le 2eme pr les echelles et le 3 pour les echellons , donc je veux quand je selection un grade automatiquement il affiche dans le 2eme combobox les valeurs d'echelle varier selon le grade ainsi quand je selection l echelle le 3eme combobox(echellons) va remplir avec des valeurs varier selon les echelles ,
    voici le code que jai mis mais ca marche pas bien
    Code java : 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
     
    if (cat.getSelectedItem().equals("Technicien")){
                echelle.removeAllItems();
     
                 echelle.addItem("8");
                 echelle.addItem("9");
                if (echelle.getSelectedItem().equals("8")){
                    echellon.removeAllItems();
                    echellon.addItem("1");
                    echellon.addItem("2");
                    echellon.addItem("3");
                    echellon.addItem("4");
                    echellon.addItem("5");
                    echellon.addItem("6")
     
                }else if(echelle.getSelectedItem().equals("9")){
                    echellon.removeAllItems();
                    echellon.addItem("1");
                    echellon.addItem("2");
                    echellon.addItem("3");
                    echellon.addItem("4");
                    echellon.addItem("5");
                    echellon.addItem("6");
                    echellon.addItem("7");
                    echellon.addItem("8");
                    echellon.addItem("9");
                    echellon.addItem("10");
                    echellon.addItem("11");
                }

    le probleme cest quand je change la valeur des echellon de 8 vers 9 le 3eme combobox il affiche les meme Items de 8 de 1 a 6 .
    Pouvez-vous m'aider ?
    cordialement

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Le problème vient du fait qu'à la sélection dans une combo, tu supprimes tous les éléments, puis tu en ajoutes, puis tu testes la sélection : le fait de supprimer tous les éléments va faire perdre la sélection, puis lorsque on ajoute un nouvel élément, celui-ci va se sélectionner. L'ajout du second va rien changer parce qu'il y a déjà une sélection. Donc ça réagit toujours comme si le premier était sélectionné. Il faut que tu relèves la sélection avant de manipuler les items puis que tu reselectionnes.

    En gros :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String selection = combo.getSelectedItem();
    String selectionCombo2 = combo2.getSelectedItem();
    combo2.removeAllItems();
    // sellon la selection dans selection on remplit combo2
    combo2.setSelectedItem(selectionCombo2); // on resélectionne
    Selon le comportement voulu, il pourra être nécessaire de tester si selectionCombo2 est null ou pas :
    • s'il est null et qu'on fait combo2.setSelectedItem(null) donc, on va supprimer la sélection (celle par défaut mise par l'ajout)
    • si on veut qu'il y ait toujours un élément sélectionné, il faudra donc ajouter un test pour empêcher cette sélection si selectionCombo2 est null



    Exemple :

    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
    public class JComboBoxDemo {
     
     
    	public static void main(String[] args) {
     
    		List<String> dataCombo = new ArrayList<>();
    		for(char c = 'A'; c<'E'; c++) {
    			for(int i=1; i<3; i++) {
    				dataCombo.add(c+""+i);
    			}
    		}
     
    		JFrame frame = new JFrame("Démo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		JPanel panel = new JPanel();
     
    		JComboBox<String> combo1 = new JComboBox<>(dataCombo.stream().toArray(String[]::new));
    		JComboBox<String> combo2 = new JComboBox<>();
    		JComboBox<String> combo3 = new JComboBox<>();
     
    		panel.add(combo1);
    		panel.add(combo2);
    		panel.add(combo3);
     
    		combo1.addItemListener(e->selectCombo1(dataCombo, combo1,combo2));
    		combo2.addItemListener(e->selectCombo2(dataCombo, combo2,combo3));
     
    		selectCombo1(dataCombo, combo1, combo2); 
     
    		frame.add(panel);
     
    		frame.setSize(500, 200);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	private static void selectCombo1(List<String> dataCombo, JComboBox<String> combo1, JComboBox<String> combo2) {
    		String selection1 = (String)combo1.getSelectedItem();
    		String selection2 = (String)combo2.getSelectedItem();
    		if ( selection1==null ) {
    			combo2.removeAllItems();
    		}
    		else {
    			combo2.removeAllItems();
    			String s = String.valueOf(selection1.charAt(1));
    			dataCombo.stream().filter(item-> item.endsWith(s)).forEach(item-> combo2.addItem(item));
    		}
    		if ( selection2!=null ) {
    			combo2.setSelectedItem(selection2);
    		}
    	}
     
    	private static void selectCombo2(List<String> dataCombo, JComboBox<String> combo2, JComboBox<String> combo3) {
    		String selection2 = (String)combo2.getSelectedItem(); 
    		String selection3 = (String)combo3.getSelectedItem();
    		if ( selection2==null ) {
    			combo3.removeAllItems();
    		}
    		else {
    			combo3.removeAllItems();
    			String s = String.valueOf(selection2.charAt(0));
    			dataCombo.stream().filter(item-> item.startsWith(s)).forEach(item-> combo3.addItem(item));
    		}
    		if ( selection3!=null ) {
    			combo3.setSelectedItem(selection3);
    		}
    	}
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    presque j'ai trouvé la solution ça marche bien , mais j'avais encore un message d'erreur .
    d'abord quand je selection le grade dans l 1er combo , et lechelle dans le 2 eme , et lechellon dans le 3eme un textfield va remplir avec une indice qui varie avec la sélection de ces derniers , pour la premier essaye ça fonction bien avec aucune probleme , Mais quand je reselection soit au niveau de grade ou lechelle il me donne un message derreur (" java.nullpointerexception ") je clique sur Ok une fois o deux apres les combox remplir sans probleme ,
    voici le code que j'ai fait ;

    Code java : 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
     
    //1er combox je mets ça 
    try {
                echelle.removeAllItems();
                if (cat.getSelectedItem().equals("Technicien")){
                 echelle.addItem("8");
                 echelle.addItem("9");}
    if (cat.getSelectedItem().equals("Administrateur")){
                 echelle.addItem("10");
                 echelle.addItem("11");
                 echelle.addItem("12");
            }
    }catch(exception e){
     JOptionPane.showMessageDialog(null, e);
    }
     
    //2eme combo
    try {
                echellon.removeAllItems();
                if (cat.getSelectedItem().equals("Technicien") && echelle.getSelectedItem().equals("8")){
                    echellon.addItem("1");
                    echellon.addItem("2");
                    echellon.addItem("3");
                    echellon.addItem("4");}
     if (cat.getSelectedItem().equals("Administrateur") && echelle.getSelectedItem().equals("10")){
                    echellon.addItem("1");
                    echellon.addItem("2");
                    echellon.addItem("3");}
     
    }catch(exception e){
     JOptionPane.showMessageDialog(null, e);
    }
     
    //3eme combo 
    try {
                id_indice.setText("");
                if (cat.getSelectedItem().equals("Technicien") && echelle.getSelectedItem().equals("8") && echellon.getSelectedItem().equals("1")){
            id_indice.setText("207");
     
            }if (cat.getSelectedItem().equals("Technicien")&& echelle.getSelectedItem().equals("8") && echellon.getSelectedItem().equals("2")){
                id_indice.setText("224");
            }
     if (cat.getSelectedItem().equals("Administrateur") && echelle.getSelectedItem().equals("10") && echellon.getSelectedItem().equals("1")){
            id_indice.setText("275");
     
            }if (cat.getSelectedItem().equals("Administrateur")&& echelle.getSelectedItem().equals("10") && echellon.getSelectedItem().equals("2")){
                id_indice.setText("300");
            }
             if (cat.getSelectedItem().equals("Administrateur") && echelle.getSelectedItem().equals("10") && echellon.getSelectedItem().equals("3")){
              id_indice.setText("329");
             }
             }catch(exception e){
     JOptionPane.showMessageDialog(null, e);
    }

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Quand tu as une erreur, le mieux c'est de donner la stacktrace complète et de montrer le code où ça se passe, parce " java.nullpointerexception " c'est un léger pour comprendre le problème.

    Mais je suppose que le problème vient de lorsqu'on a pas de sélection (donc getSelectedItem() retourne null).
    Dans ton code tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    echellon.removeAllItems();
                if (cat.getSelectedItem().equals("Technicien") && echelle.getSelectedItem().equals("8")){
                    ...
                }
                if (cat.getSelectedItem().equals("Administrateur") && echelle.getSelectedItem().equals("10")){
                    ...
                }
    }
    Donc si tu n'as aucune de ces deux combinaisons, echelon devient vide et echelon.getSelectionItem() est null. Dans l'écouteur de echellon, tu auras donc une NullPointerException lorsque tu fais : echellon.getSelectedItem().equals(...)Déjà, en inversant le test, ça devrait ne plus faire l'exception : "2".equals(echellon.getSelectedItem()).

    Mais tu devrais faire quelque chose de plus objet parce que ça commence à devenir un code un peu lourd avec tous ces if... En plus tu n'utilise pas de constantes ! Imagine qu'il faille changer un libellé ou ajouter un échelon, tu vas galérer et tu ne seras pas à l'abri d'oublier un cas...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    oui tout a fait, Merci pour vos remarques ,
    j'ai essayé de trouver une methode mieux que les ' if ' mais je ne sais pas quoi faire , exactement quand j'execute le programme il est un peut lourd , si vous pouvez me resoudre ce probleme avec un code simple dont le cas que je travaille (grade - echelle - echellon ) , et je pourrai manipuler moi meme en tant de modification o des mises a jours .

    Cordialement .

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Déjà, tu fais des classes pour représenter les éléments de ton modèle : Grade, Echelle, Echelon...
    Ensuite, tu peux stocker tes données dans un fichier xml, qu'on gérera sous forme de ressources (en le mettant au même endroit que la classe, dans son package).

    Par exemple :
    Code xml : 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
    <grades>
    	<grade nom="Technicien">
    		<echelle nom="8">
    			<echelon nom="1" indice="207" />
    		</echelle>
    		<echelle nom="9">
    			<echelon nom="1" indice="210" />
    			<echelon nom="2" indice="211" />
    		</echelle>
    	</grade>
    	<grade nom="Administrateur">
    		<echelle nom="10">
    			<echelon nom="1" indice="275" />
    			<echelon nom="2" indice="300" />
    			<echelon nom="3" indice="329" />
    		</echelle>
    		<echelle nom="11">
    			<echelon nom="1" indice="350" />
    			<echelon nom="2" indice="370" />
    			<echelon nom="3" indice="389" />
    		</echelle>
    	</grade>
    </grades>

    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    import java.awt.BorderLayout;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
     
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.xml.stream.XMLInputFactory;
    import javax.xml.stream.XMLStreamException;
    import javax.xml.stream.XMLStreamReader;
    import javax.xml.stream.events.XMLEvent;
     
    public class JComboBoxDemo {
     
     
    	public static void main(String[] args) {
     
    		List<Grade> grades = populateGrades();
     
    		JFrame frame = new JFrame("Démo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		JPanel panel = new JPanel();
     
    		JComboBox<Grade> combo1 = new JComboBox<>(grades.stream().toArray(Grade[]::new));
    		JComboBox<Echelle> combo2 = new JComboBox<>();
    		JComboBox<Echelon> combo3 = new JComboBox<>();
     
    		panel.add(combo1);
    		panel.add(combo2);
    		panel.add(combo3);
     
    		frame.add(panel);
     
    		JTextField indiceField = new JTextField(10);
     
    		JPanel fieldPanel = new JPanel();
    		fieldPanel.add(indiceField);
    		frame.add(fieldPanel, BorderLayout.SOUTH);
     
    		combo1.addItemListener(e->selectCombo1(combo1,combo2));
    		combo2.addItemListener(e->selectCombo2(combo2,combo3));
    		combo3.addItemListener(e->selectCombo3(combo3,indiceField));
     
    		// sert à simuler les évenements pour la première sélection
    		selectCombo1(combo1, combo2);
    		selectCombo2(combo2, combo3);
    		selectCombo3(combo3, indiceField);
     
    		frame.setSize(500, 200);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	private static List<Grade> populateGrades() {
     
    		List<Grade> grades = new ArrayList<>();
     
    		XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
    		xmlInputFactory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE);
    		xmlInputFactory.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, Boolean.TRUE);
    		try(InputStream inputStream = JComboBoxDemo.class.getResourceAsStream("grades.xml")) {
    			XMLStreamReader reader = xmlInputFactory.createXMLStreamReader( inputStream );
    			while( reader.hasNext() ) {
    				int eventType = reader.next();
    				if ( XMLEvent.START_ELEMENT==eventType ) {
    					if ( "grade".equalsIgnoreCase(reader.getLocalName()) ) {
    						grades.add(createGrade(reader));
    					}
    				}
    				else if ( XMLEvent.END_ELEMENT==eventType ) {
    					if ( !"grade".equalsIgnoreCase(reader.getLocalName()) ) {
    						break;
    					}
    				}
    			}
    		} catch (IOException | XMLStreamException e) { 
    			e.printStackTrace();
    		}  
     
    		return grades;
    	}
     
    	private static Grade createGrade(XMLStreamReader reader) throws XMLStreamException {
    		String name = reader.getAttributeValue(null, "nom");
    		List<Echelle> echelles = new ArrayList<>();
    		while( reader.hasNext() ) {
    			int eventType = reader.next();
    			if ( XMLEvent.START_ELEMENT==eventType ) {
    				if ( "echelle".equalsIgnoreCase(reader.getLocalName()) ) {
    					echelles.add(createEchelle(reader));
    				}
    			}
    			else if ( XMLEvent.END_ELEMENT==eventType ) {
    				if ( !"echelle".equalsIgnoreCase(reader.getLocalName()) ) {
    					break;
    				}
    			}
    		}
    		return new Grade(name, echelles);
    	}
     
    	private static Echelle createEchelle(XMLStreamReader reader) throws XMLStreamException {
    		String name = reader.getAttributeValue(null, "nom");
    		List<Echelon> echelons = new ArrayList<>();
    		while( reader.hasNext() ) {
    			int eventType = reader.next();
    			if ( XMLEvent.START_ELEMENT==eventType ) {
    				if ( "echelon".equalsIgnoreCase(reader.getLocalName()) ) {
    					echelons.add(createEchelon(reader));
    				}
    			}
    			else if ( XMLEvent.END_ELEMENT==eventType ) {
    				if ( !"echelon".equalsIgnoreCase(reader.getLocalName()) ) {
    					break;
    				}
    			}
    		}
    		return new Echelle(name, echelons);
    	}
     
    	private static Echelon createEchelon(XMLStreamReader reader) {
    		String name = reader.getAttributeValue(null, "nom");
    		String indice = reader.getAttributeValue(null, "indice");
    		return new Echelon(name, indice);
    	}
     
    	private static void selectCombo1(JComboBox<Grade> combo1, JComboBox<Echelle> combo2) {
    		Grade selection1 = (Grade)combo1.getSelectedItem();
    		Echelle selection2 = (Echelle)combo2.getSelectedItem();
    		combo2.removeAllItems();
    		if ( selection1!=null ) {
    			selection1.getEchelles().forEach(echelle-> combo2.addItem(echelle));
    		}
    		if ( selection2!=null ) {
    			combo2.setSelectedItem(selection2);
    		}
    	}
     
    	private static void selectCombo2(JComboBox<Echelle> combo2, JComboBox<Echelon> combo3) {
    		Echelle selection2 = (Echelle)combo2.getSelectedItem(); 
    		Echelon selection3 = (Echelon)combo3.getSelectedItem();
    		combo3.removeAllItems();
    		if ( selection2!=null ) {
    			selection2.getEchelons().forEach(echelon-> combo3.addItem(echelon));
    		}
    		if ( selection3!=null ) {
    			combo3.setSelectedItem(selection3);
    		}
    	}
     
    	private static void selectCombo3(JComboBox<Echelon> combo3, JTextField indiceField) {
    		Echelon echelon = (Echelon) combo3.getSelectedItem();
    		if ( echelon==null) {
    			indiceField.setText("");
    		}
    		else {
    			indiceField.setText(echelon.getIndice());
    		}
    	}
     
    	public static class Grade {
     
    		private final String grade;
    		private final List<Echelle> echelles;
     
    		public Grade(String grade, List<Echelle> echelles) {
    			this.grade=grade;
    			this.echelles = Collections.unmodifiableList(new ArrayList<>(echelles));
    		}
     
    		public List<Echelle> getEchelles() {
    			return echelles;
    		}
     
    		public String toString() {
    			return grade;
    		}
     
    	}
     
    	public static class Echelle {
     
    		private final String echelle ;
    		private final List<Echelon> echelons;
     
    		public Echelle(String echelle, List<Echelon> echelons) {
    			this.echelle=echelle;
    			this.echelons=Collections.unmodifiableList(echelons);
    		}
     
    		public List<Echelon> getEchelons() {
    			return echelons;
    		}
     
    		public String toString() {
    			return echelle;
    		}
     
    	}
     
    	public static class Echelon {
     
    		private final String echelon ;
    		private final String indice;
     
    		public Echelon(String echelon, String indice) {
    			this.echelon=echelon;
    			this.indice=indice;
    		}
     
    		public String getIndice() {
    			return indice;
    		}
     
    		public String toString() {
    			return echelon;
    		}
     
    	}
    }
    Il n'y a plus de if : chaque élément sélectionné fourni la liste des élements à mettre dans la combo liée, et à la fin l'élément de type Echelon connait son indice qu'il suffit de mettre dans le JTextField. Et pour modifier les données, il n'y a plus qu'à modifier le fichier xml (comme c'est une ressource, il faudra recompiler, mais au moins il sera dans le jar, donc ne se baladera pas à part de l'application).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Mercii bien ça Fonctionne avec POO , malheureusement je travaille avec la programmation événementielle ,
    c'est pour cela j'ai pas utilisé des Classes, des modèles .
    est ce que y'a de possibilité d'intégrer ce code dans mon projet , ou bien il faudra que je chercher une autre solution .

    COrdialement .

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Il n'y a aucune incompatibilité entre la programmation évenementielle et la programmation orientée objet. D'ailleurs mon programme exemple utilise des évenements (forcément, pour écouter les changement de sélection des combos).

    Si ce sont les lambdas qui te gènent parce que tu n'utilises pas Java 8, et bien, pourquoi ne pas utiliser Java 8 ? Sinon, il faut simplement remplacer les lambdas, streams et references de fonctions par l'équivalent Java 7.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Lier des objets entre eux !
    Par laurent94 dans le forum Powerpoint
    Réponses: 4
    Dernier message: 26/05/2015, 03h05
  2. [Débuter] Lier des boutons entre eux (comme des boutons radio)
    Par Avatar36 dans le forum Qt Quick
    Réponses: 11
    Dernier message: 10/12/2014, 19h40
  3. [Toutes versions] Comment lier deux Combobox entre eux ?
    Par létudiant_access dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/02/2013, 14h27
  4. Archivage : Lier des documents entre-eux
    Par _Em'' dans le forum Configuration
    Réponses: 2
    Dernier message: 06/11/2012, 16h41
  5. Comment lier des dropdownlist entre elles ?
    Par Laugeek dans le forum ASP.NET
    Réponses: 3
    Dernier message: 16/06/2010, 17h48

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