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

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    juin 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2013
    Messages : 11
    Points : 10
    Points
    10
    Par défaut Sélection dans JComboBox pour changer image dans une autre cellule
    Bonjour,

    J'ai plusieurs JTable dans un JPanel. Chaque tableau contient 2 lignes : une avec des JComboBox et une avec des Images.
    J'aimerais que le choix de la JComboBOx détermine l'image qui s'affichera juste en-dessous...
    Je crée mon JTable à partir d'un modèle, j'utilise un Renderer et un Editor, mais je ne vois pas où intervenir pour que cette action soit effective...

    Voici mon modèle :
    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
     
    import java.util.ArrayList;
    import javax.swing.JComboBox;
    import javax.swing.table.AbstractTableModel;
    import fr.romtaz.objets.Categorie;
    import fr.romtaz.vue.PanneauApercuPdt;
    public class ModeleTableauApercuPdt extends AbstractTableModel {
     
     //Liste des catégories pour les titres
    	private ArrayList<Categorie> listeCategories = new ArrayList<Categorie>();
    	//private JComboBox<String> comboAteliers = new JComboBox<String>();
    	//Tableau pour les titres des colonnes
    	private String[] colonnes;
     
    	public ModeleTableauApercuPdt(ArrayList<Categorie> listeCategoriesRecue) {//, JComboBox<String> comboListeAteliersRecue) {//, String adresseImageRecue) { // ,ArrayList<Atelier> listeTousAteliersRecue) {, String adresseImageRecue) {
    		//Définir la liste des catégories
    		this.listeCategories = listeCategoriesRecue;
    		//this.comboAteliers = comboListeAteliersRecue;
     
    		//Définir la taille du tableau pour les titres de colonnes
    		colonnes = new String[listeCategories.size()];
     
    		//Définir l'index pour parcourir le tableau des titres
    		int numColonne = 0;
     
    		//Définir le titre des colonnes en fonction du nombre de catégories : Atelier N°...
    		for (int numAtelier = 1 ; numAtelier <= listeCategories.size(); numAtelier++) {
     
    			//En titre de colonne numéroter les ateliers pour permettre plus de flexibilité dans les choix
    			colonnes[numColonne] = "Atelier " + numAtelier;
     
    			//Passer à la colonne suivante
    			numColonne++;
    		}
    	}
     
    @Override
    //Nombre de colonnes du tableau
    public int getColumnCount() {
    	//Autant de colonnes que de catégories
    	return colonnes.length;
    }
     
    @Override
    public String getColumnName(int columnIndex) {
    	//Titres des colonnes
    	return colonnes[columnIndex];
    }
     
    @Override
    //Nombre de lignes
    public int getRowCount() {
    	//Deux lignes dans le tableau :
    	// * Liste déroulante des ateliers de la catégorie
    	// * Image de l'atelier sélectionné pour le plan de travail
    	return 2;
    }
     
    @Override
    //Ici on spécifie la valeur de chaque cellule
    public Object getValueAt(int row, int col) {
     
    	return null;
    }
     
    public void setValueAt(Object value, int row, int column) {
     
    }
     
    //Retourne vrai si la cellule est éditable : celle-ci sera donc éditable
    public boolean isCellEditable(int row, int col){
    	//Seule la première ligne du tableau sera éditable
    	if (row==0) {
    	    return true;
    	}
    	else {
    		return false;
    	}
    }
    }
    Voici mon Renderer :
    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
     
    import java.awt.Component;
    import java.awt.Image;
    import javax.swing.DefaultCellEditor;
    import javax.swing.ImageIcon;
    import javax.swing.JComboBox;
    import javax.swing.JLabel;
    import javax.swing.JTable;
    import javax.swing.table.TableCellRenderer;
     
    public class ComboCellRenderer extends DefaultCellEditor implements TableCellRenderer {
     
    //Variables pour l'affichage d'une image
    	private ImageIcon imgAffichage;
    	private String adresseImageAffichage;
    	private String nomAtelierPourImage;
    	private JLabel lblImageAtelier = new JLabel();
     
    	//Constructeur
    	public ComboCellRenderer() {
    		super(new JComboBox<>());
    		}
     
    	public ComboCellRenderer(String adresseImageAffichageRecue, String nomAtelierPourImageRecu) {
    		super(new JComboBox<>());
     
    		this.adresseImageAffichage = adresseImageAffichageRecue;
    		this.nomAtelierPourImage = nomAtelierPourImageRecu;
    	}
     
    	//Méthode de TableCellRenderer destinée à créer le composant qui affiche la valeur dans la colonne
    	@Override
    	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row,
    			int column) {
     
    		//Définir la JComboBox qui servira d'entête
    		JComboBox<String> renderCombo = null;
     
    		//Afficher la JComboBox uniquement dans la première ligne
    		if (row == 0) { 
    			try {
    				//Utile pour afficher l'atelier sélectionné en fonction des travaux des élèves
    				renderCombo = new JComboBox<>(new String []{this.nomAtelierPourImage});
     
    				} catch (NullPointerException pasSelection) {
     
    			}
     
    		//Renvoyer la JComboBox qui servira d'entête
    		return renderCombo;
    	}
     
    		else  {
     
    			//Définir l'image et sa taille d'après l'adresse reçue
    			imgAffichage = new ImageIcon(new ImageIcon(adresseImageAffichage).getImage().getScaledInstance(50, 50, Image.SCALE_DEFAULT));
     
    			//Centrer l'image dans l'étiquuette
    			lblImageAtelier.setHorizontalAlignment(lblImageAtelier.CENTER);
    			//Renvoyer une étiquette avec l'image sélectionnée
    			lblImageAtelier.setIcon(imgAffichage);
     
    			return lblImageAtelier;
     
    		}
    	}
    }
    Voici mon Editor :
    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
     
    import java.awt.Component;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.ArrayList;
    import javax.swing.AbstractCellEditor;
    import javax.swing.ImageIcon;
    import javax.swing.JComboBox;
    import javax.swing.JTable;
    import javax.swing.table.TableCellEditor;
    import fr.romtaz.objets.Atelier;
     
    public class ComboCellEditor extends AbstractCellEditor
    implements TableCellEditor, ActionListener {
     
    private String nomAtelier;
    	private ArrayList<Atelier> listeAteliers;
     
    //Déclarer la JComboBox ici sinon elles prennent toutes la dernière valeur choisie
    	JComboBox<String> comboAteliers;
     
     
    	public ComboCellEditor(ArrayList<Atelier> listeAteliersRecue) {
    		this.listeAteliers = listeAteliersRecue;
    	}
     
    	@Override
    	public Object getCellEditorValue() {
    		return nomAtelier;
    	}
     
    	@Override
    	public Component getTableCellEditorComponent(JTable table, Object value,
    			boolean isSelected, int row, int column) {
     
    		if (row == 0) {
    			//Déclarer la JComboBox ici sinon elles prennent toutes la dernière valeur choisie
    			comboAteliers = new JComboBox<String>();
     
    			//Remplir la combo avec la liste des ateliers
    			for (Atelier aAtelier : listeAteliers) {
    				comboAteliers.addItem(aAtelier.getNomAtelier());
    			}
     
    			//Permet de récupérer le nom de l'atelier sur lequel on a cliqué, mais pour quoi faire?
    			comboAteliers.addActionListener(this);
     
    			return comboAteliers;
    		}
     
    		else {
    			return null;
    		}
    	}
     
    	@Override
    	public void actionPerformed(ActionEvent event) {
    		JComboBox<String> comboAteliers = (JComboBox<String>) event.getSource();
    		nomAtelier = (String) comboAteliers.getSelectedItem();
    		System.err.println("\n[ComboCellEditor] - Vous avez choisi : " + nomAtelier);
     
    	}
     
    	//Permet de recommencer une édition dans les différentes cellules si retourne true
    	public boolean stopCellEditing() {
    		return true;
    	}
    }
    Une capture pour mieux comprendre...
    Nom : changerImageAvecComboBox.png
Affichages : 24
Taille : 108,5 Ko

    Merci d'avance !!
    Bonne journée !

  2. #2
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    juin 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2013
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Bonsoir,

    Un petit up pour une bonne âme !!

    Merci !!
    Bonne soirée

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    juin 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2013
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Bonsoir,

    Pas de réponse... pas de réponse !!

    J'ai donc changé mon fusil d'épaule...

    Je suis passé par un GridBagLayout plutôt que par plusieurs JTable...
    Du coup, beaucoup plus facile de gérer les JComboBox et les JLabel qui vont avec !!

    À peine 3 heures de travail contre plus de 15 jours de galère (ça commençait à être long) !!!

    Je me remercie donc d'avoir trouvé une solution et de me permettre de passer ce topic en résolu !!

    Bonne soirée @ toutes et tous !

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

Discussions similaires

  1. [XL-2010] Afficher une image contenant des valeurs changeantes dans une autre cellule
    Par TeethBrush3r dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/08/2013, 17h36
  2. Stocker valeur d'une cellule dans une autre cellule pour enregistrement
    Par aptagud dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/08/2013, 11h34
  3. Mise à jour d'une liste à partir d'une sélection dans une autre liste
    Par kilou88 dans le forum Interfaces Graphiques en Java
    Réponses: 9
    Dernier message: 10/11/2011, 13h22
  4. [SP-2010] [MOSS] Liste filtrée par sélection dans une autre liste
    Par Goupo dans le forum SharePoint
    Réponses: 17
    Dernier message: 08/06/2010, 16h46
  5. Réponses: 2
    Dernier message: 26/05/2010, 09h32

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