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 :

Récupère toujours le mm selectedItem d'une comboBox


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Par défaut Récupère toujours le mm selectedItem d'une comboBox
    Bonjour, j'ai un petit soucis avec une JComboBox... J'ai beau chercher dans mon code je n'arrive pas à voir pas ce qui cloche.

    J'ai une comboBox :
    comboListeTypes = new JComboBox(listeTypesCodes);
    et un bouton :
    buttonGenerate = new JButton("Générer");
    buttonGenerate.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    String selectedType = (String) comboListeTypes.getSelectedItem();
    System.out.println(selectedType); }
    });
    selectedType vaut toujours le 1er élément de la comboBox (sélectionné par défaut) même si une autre élément de la comboBox est sélectionné...

    Je ne comprends vraiment pas....

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    verifie que c'est bien cette box là que tu affiche et pas une autre instance!

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Par défaut
    Je suis à peu près sur de faire référence à la même box (il n'y en a pas d'autre)...

    Voici le code complet pour en avoir le cœur net...

    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
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.rmi.NotBoundException;
     
    import javax.swing.JButton;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class Gui extends JFrame {
    	private static final long serialVersionUID = 1L;
     
    	private JComboBox comboListeTypes;
     
    	public Gui() {
    		super();
    		build();
    		buildContentPane();
    		this.pack();
    		this.setVisible(true);
    	}
     
    	private void build() {
    		setTitle("Test");
    		setLocationRelativeTo(null);
    		setResizable(true);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setContentPane(buildContentPane());
    	}
     
    	private JPanel buildContentPane() {
    		JPanel panel = new JPanel();
    		panel.setLayout(new GridLayout(2, 1));
    		panel.add(buildContentPaneInput());
    		return panel;
    	}
     
    	private JPanel buildContentPaneInput() {
    		final String[] listeTypesChamps = { "first", "second", "third", "fourth" };
     
    		JPanel panelInput = new JPanel();
    		panelInput.setLayout(new GridLayout(1, 2));
     
    		comboListeTypes = new JComboBox(listeTypesChamps);
     
    		JButton buttonGenerate = new JButton("Générer");
    		buttonGenerate.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				String selectedType = (String) comboListeTypes
    						.getSelectedItem();
    				System.out.println(selectedType);
     
    			}
    		});
     
    		panelInput.add(comboListeTypes);
    		panelInput.add(buttonGenerate);
     
    		return panelInput;
    	}
     
    	public static void main(String[] args) throws NotBoundException {
    		new Gui();
    	}
    }

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par AlKoLiK Voir le message
    Je suis à peu près sur de faire référence à la même box (il n'y en a pas d'autre)...
    Et pourtant... il y en as bien deux !!!

    Dans ton constructeur tu fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	public Gui() {
    		super();
    		build();
    		buildContentPane();
    		this.pack();
    		this.setVisible(true);
    	}
    Et dans build() tu construis ton interface graphique via cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setContentPane(buildContentPane());
    Seulement tu vas rappeler une nouvelle fois cette méthode dans ton constructeur, ce qui va te créer un panel inutilisé et modifier ton attribut d'instance comboListeTypes... ce qui impactera ton premier listener (il pointe désormais sur ce second JCombo invisible).


    Bref il faut supprimer le buildContentPane() de ton constructeur.



    Enfin perso je pense plutôt que c'est ta méthode build() qui est en trop (son code devrait directement se trouver dans le constructeur ), et pour éviter ce genre de problème, j'initialiserai mes attributs d'instances dans le(s) constructeur(s) en les déclarant en final lorsqu'il ne doivent pas être modifié/dupliqué


    a++

    Voici le code complet pour en avoir le cœur net...

    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
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.rmi.NotBoundException;
     
    import javax.swing.JButton;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class Gui extends JFrame {
    	private static final long serialVersionUID = 1L;
     
    	private JComboBox comboListeTypes;
     
    	public Gui() {
    		super();
    		build();
    		buildContentPane();
    		this.pack();
    		this.setVisible(true);
    	}
     
    	private void build() {
    		setTitle("Test");
    		setLocationRelativeTo(null);
    		setResizable(true);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setContentPane(buildContentPane());
    	}
     
    	private JPanel buildContentPane() {
    		JPanel panel = new JPanel();
    		panel.setLayout(new GridLayout(2, 1));
    		panel.add(buildContentPaneInput());
    		return panel;
    	}
     
    	private JPanel buildContentPaneInput() {
    		final String[] listeTypesChamps = { "first", "second", "third", "fourth" };
     
    		JPanel panelInput = new JPanel();
    		panelInput.setLayout(new GridLayout(1, 2));
     
    		comboListeTypes = new JComboBox(listeTypesChamps);
     
    		JButton buttonGenerate = new JButton("Générer");
    		buttonGenerate.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				String selectedType = (String) comboListeTypes
    						.getSelectedItem();
    				System.out.println(selectedType);
     
    			}
    		});
     
    		panelInput.add(comboListeTypes);
    		panelInput.add(buttonGenerate);
     
    		return panelInput;
    	}
     
    	public static void main(String[] args) throws NotBoundException {
    		new Gui();
    	}
    }
    [/QUOTE]

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Par défaut
    yay ça marche ! Effectivement vous aviez raison j'instanciais 2 fois ma comboBox à cause du double appel à buildContentPane().

    Dire que ce code servait de base à toutes mes applis swing depuis l'année dernière Il y en a pas eu beaucoup en même temps^^

    Merci beaucoup à vous deux.

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

Discussions similaires

  1. Multi-selection dans une ComboBox ?
    Par Moloko dans le forum MFC
    Réponses: 5
    Dernier message: 07/07/2021, 17h26
  2. Réponses: 4
    Dernier message: 11/10/2011, 09h26
  3. [AC-2002] le type de valeur récupéré d'une combobox ne correspond pas
    Par glopglop82 dans le forum VBA Access
    Réponses: 5
    Dernier message: 19/02/2011, 10h30
  4. Réponses: 2
    Dernier message: 26/07/2004, 13h34
  5. Pré-sélectionner un élément d'une combobox
    Par delphim dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/06/2003, 15h26

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