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 :

Mise à jour JCombobox dans une JTable


Sujet :

Composants Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 35
    Points : 31
    Points
    31
    Par défaut Mise à jour JCombobox dans une JTable
    Bonjour,

    Je vais essayer d'être le plus claire possible sur mon cas.

    J'ai mis des JCombobox dans une JTable.
    Ces JCombobox sont mis à jour par l'utilisateur, tout le long de l'application.
    Le problème est que la JCombobox déjà en sélection ( dont la ligne est sélectionne) ne se met pas à jour.
    Il me faut cliquer sur une autre ligne pour que la JCombobox soit mis a jour.
    C'est très dérangeant quand je n'est qu'une ligne ou tout simplement pour l'ergonomie.

    Je voudrai savoir ce que je dois modifier et dans quoi, si vous voulez, je peux vous mettre les parties de mon code.

    Merci a tous ceux qui se pencheront sur se problème.

  2. #2
    Membre averti
    Avatar de omar344
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2007
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2007
    Messages : 287
    Points : 301
    Points
    301
    Par défaut
    Salut,
    Du code si c'est possible

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 35
    Points : 31
    Points
    31
    Par défaut ok
    Voici du code,

    D'abord,

    le model:
    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
    public class ZModel extends AbstractTableModel{
      /**
             * 
             */
      private static final long serialVersionUID = 1L;
      private Object[][] data;
      private String[] title;
     
      //Constructeur
      public ZModel(Object[][] data, String[] title){
        this.data = data;
        this.title = title;
      }
     
      //Retourne le nombre de colonnes
      public int getColumnCount() {
        return this.title.length;
      }
     
      //Retourne le nombre de lignes
      public int getRowCount() {
        return this.data.length;
      }
     
      //Retourne la valeur à l'emplacement spécifié
      public Object getValueAt(int row, int col) {
        return this.data[row][col];
      } 
     
      public String getColumnName(int col) {
    	  return this.title[col];
    	}
     
      public void setValueAt(Object arg0, int row, int col) {
    		this.data[row][col]=arg0;
    		fireTableCellUpdated(row, col);
      }
     
      //Méthode permettant de retirer une ligne du tableau
      public void removeRow(int position){
     
         int indice = 0, indice2 = 0;
         int nbRow = this.getRowCount()-1, nbCol = this.getColumnCount();
         Object temp[][] = new Object[nbRow][nbCol];
     
         for(Object[] value : this.data){
            if(indice != position){
               temp[indice2++] = value;
            }
            System.out.println("Indice = " + indice);
            indice++;
         }
         this.data = temp;
         temp = null;
         //Cette méthode permet d'avertir le tableau que les données
         //ont été modifiées, ce qui permet une mise à jour complète du tableau
         this.fireTableDataChanged();
      }
     
      //Permet d'ajouter une ligne dans le tableau
      public void addRow(){
         int indice = 0, nbRow = this.getRowCount(), nbCol = this.getColumnCount();
     
         Object temp[][] = this.data;
         this.data = new Object[nbRow+1][nbCol];
     
         for(Object[] value : temp)
            this.data[indice++] = value;
     
         //this.data[indice] = data;
         temp = null;
         //Cette méthode permet d'avertir le tableau que les données
         //ont été modifiées, ce qui permet une mise à jour complète du tableau
         this.fireTableDataChanged();
      }
     
      public Class getColumnClass(int col){
    	  //On retourne le type de la cellule à la colonne demandée
    	  //On se moque de la ligne puisque les types de données sont les mêmes quelle que soit la ligne
    	  //On choisit donc la première ligne
    	  return this.data[0][col].getClass();
    	}
    	//Retourne vrai si la cellule est éditable : celle-ci sera donc éditable
    	public boolean isCellEditable(int row, int col){
    	  return true; 
    	}
     
    }
    ensuite mon
    Editor:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class MyComboBoxEditor extends DefaultCellEditor {
    	  /**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	public MyComboBoxEditor(ArrayList<String> items) {
    	    super(new JComboBox((String[]) items.toArray(new String[items.size()])));
    	  }
    	}
    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
    public class MyComboBoxRenderer extends JComboBox<String> implements TableCellRenderer {
    	  /**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	public MyComboBoxRenderer(ArrayList<String> items) {
    	    super((String[]) items.toArray(new String[items.size()]));
    	  }
     
    	  public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
    	      boolean hasFocus, int row, int column) {
    	    if (isSelected) {
    	      setForeground(table.getSelectionForeground());
    	      super.setBackground(table.getSelectionBackground());
    	    } else {
    	      setForeground(table.getForeground());
    	      setBackground(table.getBackground());
    	    }
    	    setSelectedItem(value);
    	    return this;
    	  }
    	}
    comment je remplis mon tableau:
    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
     
    	private JTable tableau;
    	private String table_titre[]={"Vial","Element Associé"};
    	private ArrayList<String> data_JCB=new ArrayList<>();
     
    private void Init_edit(ArrayList<String> value) {
    	for(int i=0;i<value.size();i++){
    		//First, initialation JCombobox
    			if(value.get(i)!=default_vial){
    				data_JCB.add(value.get(i));
    			}
    			tableau.setValueAt(value.get(i), i, 1);
    	}
    	tableau.getColumn(table_titre[1]).setCellEditor(new MyComboBoxEditor(data_JCB));
    	tableau.getColumn(table_titre[1]).setCellRenderer(new MyComboBoxRenderer(data_JCB));
    Merci à tous ceux qui se pencherons sur mon problème.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 35
    Points : 31
    Points
    31
    Par défaut Trouvé.
    Je viens de trouver une solution.

    Je dit juste à mon model que la structure change.(ce qui supprime la structure présente: plus de JCombobox. Pourquoi? je sais pas).

    Puis je re-applique mon renderer et mon editor.

    se qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    model.fireTableStructureChanged(); // un model.firTableDataChanged() n'a pas marcher.
    data_JCB.add(result);//result est la valeur ajouter à ma JCombobox et qui ne voulait pas s'afficher dans la case de la ligne déjà en selection. 
    tableau.getColumn(table_titre[1]).setCellEditor(new MyComboBoxEditor(data_JCB));
    tableau.getColumn(table_titre[1]).setCellRenderer(new MyComboBoxRenderer(data_JCB));
    Je trouve cette méthode un peu bourrin quand même. Donc si quelqu'un a une autre solution,
    Je suis preneur.

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

Discussions similaires

  1. Insérer une JComboBox dans une JTable sous NetBeans ?
    Par khadi8 dans le forum Composants
    Réponses: 1
    Dernier message: 29/04/2012, 17h49
  2. [Débutant] Mise à jour graphique dans une autre figure que la principale
    Par Luis Vieira da Silva dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 26/06/2009, 12h04
  3. JComboBox en couleur dans une JTable
    Par ythim dans le forum Composants
    Réponses: 8
    Dernier message: 04/09/2006, 13h23
  4. supprimer un item d'un jcombobox dans une jtable
    Par bellout dans le forum Composants
    Réponses: 6
    Dernier message: 22/06/2006, 16h06
  5. Requete De Mise A Jour Inseree Dans Une Macro
    Par tereda dans le forum Access
    Réponses: 1
    Dernier message: 10/05/2006, 12h34

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