/** * Scénario général : * * une JComboBox que je remplis et affecte comme éditeur d'une colonne de ma JTable. * Je mets cette JTable dans un JSCrollPane * Je mets ce JScrollPane dans un JPanel * Je rajoute ce JPanel dans mon JTabbedPane * * Ce que je veux faire : * * Losque l'utilisateur sélectionne un item de ma JComboBox, faire une action suivant la * valeur de cette item. Pour simplifier, l'action est ici un simple affichage de l'item sélectionné * * * Ce que je fais : * * J'ai placé un ActionListener sur ma JComboBox qui est sensé détecter la sélection d'un item * A priori cela devrait marcher. Cela fonctionne pour d'autres JComboBox que j'ai implémenté mais qui ne sont pas dans une * JTable (elles sont ajoutés directement sur le panel). * * * Problème : * * L'ActionListener ne fonctionne pas pour ma JComboBox située dans ma JTable !!!!! ); * C'est comme si le fait d'utiliser une JComboBox comme éditeur de ma JTable, rajouter un palier, une couche supplémen * -taire que l'ActionListener (qu'implémente ma classe) n'arrive pas à écouter (à atteindre). C'est un peu comme ça que * je le comprends, je me trompe peut-être. Que dois-je faire? * */ public class Onglet2 extends JTabbedPane implements ActionListener{ private GridBagConstraints constraint2_ = null; private JButton btnAjoutCommentaires_; private CommentairesTableModel modelCommentaires_; private JTable tblCommentaires_; private JScrollPane scrollCommentaires_; private JComboBox cbxType_; private TypeDB typesDb_; private CbxModel comboModelTypes_; /*...*/ public Onglet2() { /* Initialisation des composants */ initComponent(); constraint1_ = new GridBagConstraints(); /* Contrainte sur le placement des composants sur mon panel1 */ /*... propriétés du constraint1 */ constraint2_ = new GridBagConstraints(); /* Contrainte sur le placement des composants sur mon panel2 */ /*... propriétés du constraint2 */ /* Je rajoute mon scrollpane qui contient ma JTable, sur mon panel2 */ panel2_.add(scrollCommentaires_, constraint2_); col2_++; constraint2_.gridx = col2_; /* Je rajoute mon bouton sur mon panel2 */ panel2_.add(btnAjoutCommentaires_, constraint2_); /* Je rajoute mes 2 panels à mon composant JTabbedPane */ addTab("Batchs", scroll1_); addTab("Commentaires", panel2_); /* On ajoute un écouteur sur certains composants */ btnAjoutCommentaires_.addActionListener(this); cbxType_.addActionListener(this); /* Ce qui nous intéresse, c'est le panel2 qui contient ma JTable montée sur mon scrollPane, lui-même rajouté au panel2. Jusque là tout va bien. Le pbm est le suivant : J'ai mis en place un écouteur sur le bouton 'btnAjoutCommentaires' qui rajoute une ligne dans le modèle de données de la JTable et par suite dans la JTable. Une fois la ligne rajoutée, je construis une JComboBox nommée cbxType_ que je défini en tant qu'éditeur pour la colonne 4 de ma JTable. Jusque là pas de souci apparent. Le problème c'est que cette dernière JComboBox ne réagit pas à mon écouteur ActionListener. Dans le cas présent, je voudrais détecter la sélection d'un item en utilisant un écouteur (ActionListener à priori rempli cette tâche) et afficher la sélection faite. */ } public void actionPerformed(ActionEvent e) { if(e.getSource().equals(btnAjoutCommentaires_)) /* Click sur le bouton d'ajout de commentaires*/ { /** * Algo : * _ Inserer une nouvelle ligne dans le modèle de données * _ Incrémenter la colonne N° de commentaire du modèle de données * _ Reconstruire la JTable commentaire * _ Mettre en forme la colonne Type * _ Mettre en forme la colonne N° de Batch */ /*.... déclarations diverses...*/ /* On rajoute une ligne dans le modèle de données de la JTable */ modelCommentaires_.ajoutLigne(); /*....*/ /* On reconstruit la JTable */ tblCommentaires_.setModel(modelCommentaires_); /* Mise en forme de la colonne Type avec une JComboBox (celle qui pose problème)*/ /* Instanciation d'une ArrayList pour construction du modèle de données */ StringArray = new ArrayList(); /* Instanciation d'un tableau temporaire qui récupère dans la base de données les informations à mettre dans la JComboBox */ temp = new String[typesDb_.getTable().length]; /* On récupère les infos */ temp = typesDb_.getTable(); /* typeDb_ map une des tables de ma base de données. La méthode getTable récupère les infos*/ /* On remplit la ArrayList */ for(int i=0; i