Partage
  • Partager sur Facebook
  • Partager sur Twitter

Colonne

Insérer une colonne selon la position voulu

    17 août 2014 à 22:34:09

    Salut je suis une nouvelle membre dans cette forum. Je me présente comme étant une débutante en programmation java .En ce moment je travaille sur les tableau.

    J'ai 2 gros problème à résoudre avec mon JTable.J'ai créé un bouton " insérer Colonne" pour insérer des colonnes. Mon premier problème, c'est quand j’insère une colonne celui ci se place en  dernier alors que je veux l'insérer après la colonne "price3." Mon deuxième problème est quand j’insère une colonne ; la colonne contenant le ComboBox «poids» change et devient éditable  . Pouvez vous m'aider sur ces deux problèmes qui me préoccupent depuis 2 semaines.
    Voici le code

    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import java.util.Vector;
    
    import javax.swing.DefaultCellEditor;
    import javax.swing.JButton;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableColumn;
    
    //CTRL + SHIFT + O pour générer les imports
    public class Tableur extends JFrame {
    	private JButton ajout;
        DefaultTableModel tableur;
        JTable table;
        JScrollPane entete;
    
    
      public Tableur(){
    	///add additional items
    		
    		ajout = new JButton(" Ajouter une colonne");
    		ajout.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent e){
    		
    				}	
    		});
    		
    	add(ajout, BorderLayout.SOUTH);	
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("JTable");
        this.setSize(600, 200);
        ajout.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
           	 int size =tableur.getRowCount();
           	 Vector ColumNames=createDataVector("column",size);
           	 String name="Price"+tableur.getColumnCount();
           	 tableur.addColumn(name,ColumNames);
           	
            }
            private Vector createDataVector(String string,int size){
           	 return null;
            }
           });
        //Les données du tableau
        Object[][] data = {
          {"rice","12","$18", "$15","$12", ""},
          {"millet","8","$20","$17", "$15", ""},
          {"corn","10", "$14","$13","$12", ""},
        };
    
        //Les titres des colonnes
        String  title[] = {"marchandisee"," poid en kg", "prix 1", "prix 2","prix3","utilisation"};
        tableur = new  DefaultTableModel(data, title);
      						    	              table = new JTable(tableur){       	
      						    	              public boolean isCellEditable(int rowIndex, int colIndex) {
      						    	              if ((colIndex==0)) return false;
      						    	              else return true;
      						    	              }        
      						    	              };    
       
    						    	              entete= new JScrollPane(table);
    						    	              table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    						    	                table.setColumnSelectionAllowed(true);
    						    	            //----------------------------------------------------------
    					    	                   JComboBox  jcbocoeff = new JComboBox();  
    
    					    	                   jcbocoeff.addItem("10 "); 
    					    	                   jcbocoeff.addItem("11 "); 
    					    	                   jcbocoeff.addItem("12 "); 
    					    	                   jcbocoeff.addItem("13 "); 
    					    	                   jcbocoeff.addItem("14 "); 
    					    	                   jcbocoeff.addItem("15 "); 
    					    	                   jcbocoeff.addItem("16 "); 
    					    	                   jcbocoeff.addItem("17 "); 
    					    	                   jcbocoeff.addItem("18 "); 
    					    	                   jcbocoeff.addItem("19 ");
    					    	                   jcbocoeff.addItem("20 "); 
    					    	                  TableColumn poid = table.getColumn(" poid en kg");  
    					    	                  poid.setCellEditor(new DefaultCellEditor(jcbocoeff)); 
    					    	                  add(entete, BorderLayout.NORTH);
      }   
    
      public static void main(String[] args){
        Tableur fen = new Tableur();
        fen.setVisible(true);
      }   }



    • Partager sur Facebook
    • Partager sur Twitter
      18 août 2014 à 9:14:45

      Bonjour,

      Pour le problème du combobox, c'est qu'à chaque fois que vous faites addColumn, la jtable est reconstruite (plutôt les colonnes, mais on ne va pas entrer dans le détail), donc il ne faut pas oublier de reconstruire le combobox des lignes.

      Ensuite, addColumn s'ajoute toujours à la fin et il n'y a pas d'insertColumn, donc faut s'en construire une, mais n'oublier surtout pas que la jtable se reconstruire à chaque fois. On va donc ajouter une colonne à la fin et la déplacer, mais faut pas oublier qu'à la prochaine ajout de colonne de re-déplacer la première colonne qui a été ajouté, d'où la nécessiter de connaître le nombre de colonne ajouter en plus dans la table de départ.

      Je vous propose d'ajouter ces deux fonctions :

      public void insertColumn(int column, String name, Vector columnData) {
           tableur.addColumn(name, columnData);
           int nbColumSup = table.getColumnCount() - 6;
           for (int i = 0; i < nbColumSup; i++) table.moveColumn(table.getColumnCount()-1, column);
      }
      
      public void poid(JTable table) {
           JComboBox jcbocoeff = new JComboBox();
           jcbocoeff.addItem("10 ");
           jcbocoeff.addItem("11 ");
           jcbocoeff.addItem("12 ");
           jcbocoeff.addItem("13 ");
           jcbocoeff.addItem("14 ");
           jcbocoeff.addItem("15 ");
           jcbocoeff.addItem("16 ");
           jcbocoeff.addItem("17 ");
           jcbocoeff.addItem("18 ");
           jcbocoeff.addItem("19 ");
           jcbocoeff.addItem("20 ");
           TableColumn poid = table.getColumn(" poid en kg");
           poid.setCellEditor(new DefaultCellEditor(jcbocoeff));
      }
      6 colonnes :

      "marchandisee" => colonne 0.

      " poid en kg" => colonne 1.

      "prix 1" => colonne 2.

      "prix 2" => colonne 3.

      "prix3" => colonne 4.

      "utilisation" => colonne 5.

      Pour le placer après la colonne "prix3", vous devez placer la nouvelle colonne en colonne 5 :

      insertColumn(5, name, ColumNames);

      Il y a 6 colonnes au départ, ce qui nous donne :

      int nbColumSup = table.getColumnCount() - 6;

      Ne pas oublier de replacer toutes les nouvelles colonnes, donc :

      for (int i = 0; i < nbColumSup; i++) table.moveColumn(table.getColumnCount()-1, column);

      Qui donne le programme suivant :

      import java.awt.BorderLayout;
      import java.awt.event.ActionEvent;
      import java.awt.event.ActionListener;
      import java.awt.event.KeyEvent;
      import java.util.Vector;
       
      import javax.swing.DefaultCellEditor;
      import javax.swing.JButton;
      import javax.swing.JComboBox;
      import javax.swing.JFrame;
      import javax.swing.JScrollPane;
      import javax.swing.JTable;
      import javax.swing.table.DefaultTableModel;
      import javax.swing.table.TableColumn;
       
      //CTRL + SHIFT + O pour générer les imports
      public class Tableur extends JFrame {
          private JButton ajout;
          DefaultTableModel tableur;
          JTable table;
          JScrollPane entete;
       
       
        public Tableur(){
          ///add additional items
               
              ajout = new JButton(" Ajouter une colonne");
              ajout.addActionListener(new ActionListener(){
                  public void actionPerformed(ActionEvent e){
               
                      }  
              });
               
          add(ajout, BorderLayout.SOUTH);
          this.setLocationRelativeTo(null);
          this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          this.setTitle("JTable");
          this.setSize(600, 200);
          ajout.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent e) {
               int size =tableur.getRowCount();
               Vector ColumNames=createDataVector("column",size);
               String name="Price"+tableur.getColumnCount();
               insertColumn(5, name, ColumNames);
               poid(table);
               //tableur.addColumn(name,ColumNames);
               
              }
              private Vector createDataVector(String string,int size){
               return null;
              }
             });
          
          //Les données du tableau
          Object[][] data = {
            {"rice","12","$18", "$15","$12", ""},
            {"millet","8","$20","$17", "$15", ""},
            {"corn","10", "$14","$13","$12", ""},
          };
       
          //Les titres des colonnes
          String  title[] = {"marchandisee"," poid en kg", "prix 1", "prix 2","prix3","utilisation"};
          tableur = new  DefaultTableModel(data, title);
          table = new JTable(tableur){
              public boolean isCellEditable(int rowIndex, int colIndex) {
                  if ((colIndex==0)) return false;
                  else return true;
              }
          };
          poid(table);
          entete= new JScrollPane(table);
          table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
          table.setColumnSelectionAllowed(true);
          add(entete, BorderLayout.NORTH);
        }
        
        public void insertColumn(int column, String name, Vector columnData) {
              tableur.addColumn(name, columnData);
              int nbColumSup = table.getColumnCount() - 6;
              for (int i = 0; i < nbColumSup; i++) table.moveColumn(table.getColumnCount()-1, column);
          }
          
          public void poid(JTable table) {
              JComboBox  jcbocoeff = new JComboBox();
              jcbocoeff.addItem("10 ");
              jcbocoeff.addItem("11 ");
              jcbocoeff.addItem("12 ");
              jcbocoeff.addItem("13 ");
              jcbocoeff.addItem("14 ");
              jcbocoeff.addItem("15 ");
              jcbocoeff.addItem("16 ");
              jcbocoeff.addItem("17 ");
              jcbocoeff.addItem("18 ");
              jcbocoeff.addItem("19 ");
              jcbocoeff.addItem("20 ");
              TableColumn poid = table.getColumn(" poid en kg");
              poid.setCellEditor(new DefaultCellEditor(jcbocoeff));
          }
       
        public static void main(String[] args){
          Tableur fen = new Tableur();
          fen.setVisible(true);
        }
      }

      Bonne continuation.

      • Partager sur Facebook
      • Partager sur Twitter
        18 août 2014 à 15:51:46

        pctronique , vous êtes un type génial.Je n'ai pas les mots pour vous remercier .Que Dieu vous bénisse .En plus des solutions apportées à nos problème vous nous expliquez  pourquoi  ça  ne marchait pas et vous nous  détaillez les codes.Je remercie  Vieux96 qui est un membre de ce forum. C'est même lui qui m'a recommandé cette forum.A propos des noms de  colonne Je veux lorsque j'ajoute une colonne il me donne "price4"au lieu  de  "price6" et ainsi de suite que les  "prices" soient successifs à partir de "price3"  .Merci énormément

        • Partager sur Facebook
        • Partager sur Twitter
          18 août 2014 à 17:00:40

          Je m'en-doutais que vous connaissiez "Vieux96", par rapport au titre et au codage, en général ça ne se ressemble pas autant, car chaque programmeur à sa méthode. "Un type génial" peut-être pas, mais quand je peux aider, je le fais.

          Je préfère prendre mon temps d'expliquer, pour que le problème soit clair et savoir pourquoi c'est arrivé et pourquoi utiliser une autre solution. Car, ça peut servir pour une autre fois, ou même si vous voulez le modifier, savoir comment le faire par vous-même, peut-être même aider d'autre personne.

          Il m'arrive de ne pas expliquer quand ça me semble trop simple, mais si la personne ne comprend pas, j'explique.

          Au départ vous avez 6 colonnes et le prochain qui sera ajouté doit-être, price4. Donc on fait 6 - 4 = 2 et dans ce cas on va soustraire le nombre de colonne à 2 et on a la solution.

          int nbColumn = table.getColumnCount() - 2;
          String name="Price"+nbColumn;

          PS : n'oubliez pas qu'au moment de créer le nom, la nouvelle colonne n'a pas été encore construite.

          Bonne continuation.

          -
          Edité par pctronique 18 août 2014 à 17:14:41

          • Partager sur Facebook
          • Partager sur Twitter
            18 août 2014 à 19:28:26

            Merci le code marche . "vieux96"et moi travaillons ensemble à améliorer notre connaissance sur la conception d'un tableau en java.Pour cela nous sommes entrain de concevoir un petit programme bien détaillé   sur JTable. Ainsi J'ai vu que "vieux96"  avait envoyé un problème concernant   le déplacement des colonnes avec la souris sans modifier l'édition ou pas de colonnes et vous l'avez proposé une solution qui marche à merveille.

            En suivant le même principe sur ce tableau  j'ai rendu nom éditable la colonne"marchandisee" quelque soit la position occupé dans le tableau en copiant ce code

             table = new JTable(tableur){
                    public boolean isCellEditable(int rowIndex, int colIndex) {
                         table.getColumnModel().getColumn(0);
                         int ligne = 0;
                         if (((String)table.getColumnModel().getColumn(1).getHeaderValue()).equals("marchandisee")) ligne = 1;
                         else if (((String)table.getColumnModel().getColumn(2).getHeaderValue()).equals("marchandisee")) ligne = 2;
                         else if (((String)table.getColumnModel().getColumn(3).getHeaderValue()).equals("marchandisee")) ligne = 3;
                         else if (((String)table.getColumnModel().getColumn(4).getHeaderValue()).equals("marchandisee")) ligne = 4;
                         else if (((String)table.getColumnModel().getColumn(5).getHeaderValue()).equals("marchandisee")) ligne = 5;
            
                         else ligne = 0;
                         if ((colIndex==ligne)) return false;
                         else return true;
                    }
               };

            Mais le problème est que si veux aussi rendre en même temps  nom éditable la colonne "utilisation"quelque soit le déplacement; il m'affichera des erreurs sur

                         table.getColumnModel().getColumn(5);
            


             même si je change la variable "int ligne ".Pour être plus simple à comprendre je veux rendre les deux colonnes "marchandisee" et "utilisation" nom éditable ou qu'ils soit positionner avec la souris dans le tableau .Une chose que j'ai remarqué aussi est que quand j'ajoute des colonnes et

            que je positionne les deux colonne "marchandisee" et "utilisation" en dernier ils deviennent éditables alors que celles  ci étaient nom éditable avant l'ajout.

            • Partager sur Facebook
            • Partager sur Twitter
              18 août 2014 à 21:03:01

              En cherchent un peu, vous auriez pu trouver par vous-même :lol: (surtout que vous aviez tous en main ;)).

              Déjà remplacer :

              table.getColumnModel().getColumn(0);
              int ligne = 0;

              par :

              int ligne = 0;

              Car ici "table.getColumnModel().getColumn(0);" ne sert à rien, possible, que j'ai été trop vite pour "vieux96".

              Ensuite, il a un nombre de colonne fixe, donc on peut le faire, mais pas dans votre cas, car, on ne connaît pas le nombre de colonne, celui-ci varie.

              Donc, vous devez faire ceci :

              int ligne = 0;
              while(!((String)table.getColumnModel().getColumn(ligne).getHeaderValue()).equals("marchandisee")) {
                   ligne++;
              }
              int ligne1 = 0;
              while(!((String)table.getColumnModel().getColumn(ligne1).getHeaderValue()).equals("utilisation")) {
                   ligne1++;
              }
              if ((colIndex==ligne) || (colIndex==ligne1)) return false;
              else return true;

              Bonne continuation.

              • Partager sur Facebook
              • Partager sur Twitter
                19 août 2014 à 3:45:33

                oui peut être j'ai trop vite baissé les bras  mais j'ai compris et ça marche .J'ai 2 à 3  soucis qui me resste  à régler concernant  mon  JTable et que je n'arrive pas à trouver pas dans le net.le premier problème est que je veux rendre éditable les entêtes de colonne en faisant un double clique sur elles.Merci pour tous le soutien apporté
                • Partager sur Facebook
                • Partager sur Twitter
                  19 août 2014 à 10:51:25

                  Bonjour,

                  Je vous conseille très fortement de ne pas le faire, sinon de modifier votre programme. Vous rendez non éditable les colonnes "marchandisee" et "utilisation", si on change leur nom. Si les noms changent, le code suivant risque d'avoir des difficultés :

                  int ligne = 0;
                  while(!((String)table.getColumnModel().getColumn(ligne).getHeaderValue()).equals("marchandisee")) {
                       ligne++;
                  }
                  int ligne1 = 0;
                  while(!((String)table.getColumnModel().getColumn(ligne1).getHeaderValue()).equals("utilisation")) {
                       ligne1++;
                  }
                  if ((colIndex==ligne) || (colIndex==ligne1)) return false;
                  else return true;

                  Vas vous sortir une exception du style :

                  Refaire l'étude de votre programme avant, sinon j'ai trouvé ceci :http://stackoverflow.com/questions/13079777/editable-jtableheader

                  Pour votre programme ça donne ceci. Je vous laisse étudier le code, car trop de ligne à d'écrire, mais si certaine partie sont trop compliqués, je pourrais expliquer, mais peut pas le faire en totalité. De plus, à la force je risque de faire un tuto (forum) sur les colonnes de la Jtable :lol:.

                      private JTableHeader header;
                      private JPopupMenu renamePopup;
                      private JTextField text;
                      private TableColumn column;
                  
                      public Tableur(){
                          (.....)
                          editHeadColumn();
                      }
                  
                      public void editHeadColumn() {
                          header = table.getTableHeader();
                          header.addMouseListener(new MouseAdapter(){
                              @Override
                              public void mouseClicked(MouseEvent event) {
                                  if (event.getClickCount() == 2) {
                                      editColumnAt(event.getPoint());
                                  }
                              }
                          });
                          
                          text = new JTextField();
                          text.setBorder(null);
                          text.addActionListener(new ActionListener(){
                              public void actionPerformed(ActionEvent e) {
                                  renameColumn();
                              }
                          });
                          
                          renamePopup = new JPopupMenu();
                          renamePopup.setBorder(new MatteBorder(0, 1, 1, 1, Color.DARK_GRAY));
                          renamePopup.add(text);
                      }
                      
                      private void editColumnAt(Point p) {
                          int columnIndex = header.columnAtPoint(p);
                          
                          if (columnIndex != -1) {
                              column = header.getColumnModel().getColumn(columnIndex);
                              Rectangle columnRectangle = header.getHeaderRect(columnIndex);
                              
                              text.setText(column.getHeaderValue().toString());
                              renamePopup.setPreferredSize(
                                      new Dimension(columnRectangle.width, columnRectangle.height - 1));
                              renamePopup.show(header, columnRectangle.x, 0);
                              
                              text.requestFocusInWindow();
                              text.selectAll();
                          }
                      }
                      
                      private void renameColumn() {
                          column.setHeaderValue(text.getText());
                          renamePopup.setVisible(false);
                          header.repaint();
                      }
                  

                  Pour information, pour rentre les entêtes de "marchandisee" et "utilisation", non modifiable :

                  if (!column.getHeaderValue().equals("marchandisee") && !column.getHeaderValue().equals("utilisation")) {
                       Rectangle columnRectangle = header.getHeaderRect(columnIndex);
                  
                       text.setText(column.getHeaderValue().toString());
                       renamePopup.setPreferredSize(
                       new Dimension(columnRectangle.width, columnRectangle.height - 1));
                       renamePopup.show(header, columnRectangle.x, 0);
                  
                       text.requestFocusInWindow();
                       text.selectAll();
                  }

                  Bonne continuation.

                  -
                  Edité par pctronique 19 août 2014 à 11:10:22

                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 août 2014 à 14:27:27

                    Avant d'avoir la question : "je perds mes noms de colonne à chaque rajout de colonne", je vais vous mettre du code pour éviter ce problème. Faut pas oublier que la jtable ce reconstruit à chaque rajout de colonne.

                    private String nameRemplace;
                    private HashMap<String, String> listEntete;
                    
                    public Tableur(){
                         listEntete = new HashMap<String, String>();
                         listEntete.put("marchandisee", "marchandisee");
                         listEntete.put(" poid en kg", " poid en kg");
                         listEntete.put("prix 1", "prix 1");
                         listEntete.put("prix 2", "prix 2");
                         listEntete.put("prix3", "prix3");
                         listEntete.put("utilisation", "utilisation");
                         (…)
                    }
                    voir le tuto : http://fr.openclassrooms.com/informatique/cours/apprenez-a-programmer-en-java/les-collections-d-objets
                    int ligne = 0;
                    while(!((String)table.getColumnModel().getColumn(ligne).getHeaderValue()).equals(listEntete.get("marchandisee"))) {
                         ligne++;
                    }
                    
                    int ligne1 = 0;
                    while(!((String)table.getColumnModel().getColumn(ligne1).getHeaderValue()).equals(listEntete.get("utilisation"))) {
                         ligne1++;
                    }

                    // Lors de la reconstruction de la jtable, on remplace l'ancien nom par le nouveau.

                    public void replaceName() {
                         for (int i = 0; i < table.getColumnCount(); i++) {
                              String nameColumn = (String)table.getColumnModel().getColumn(i).getHeaderValue();
                              table.getColumnModel().getColumn(i).setHeaderValue(listEntete.get(nameColumn));
                         }
                    }
                    public void insertColumn(int column, String name, Vector columnData) {
                         tableur.addColumn(name, columnData);
                         int nbColumSup = table.getColumnCount() - 6;
                         for (int i = 0; i < nbColumSup; i++) table.moveColumn(table.getColumnCount()-1, column);
                         listEntete.put(name, name);
                         replaceName();
                    }
                    public void poid(JTable table) {
                         (...)
                         TableColumn poid = table.getColumn(listEntete.get(" poid en kg"));
                         poid.setCellEditor(new DefaultCellEditor(jcbocoeff));
                    }
                    private void editColumnAt(Point p) {
                        int columnIndex = header.columnAtPoint(p);
                        if (columnIndex != -1) {
                             column = header.getColumnModel().getColumn(columnIndex);
                             for (String value : listEntete.keySet()) {
                                  if (listEntete.get(value).equals(column.getHeaderValue())) nameRemplace = value;
                             }
                             Rectangle columnRectangle = header.getHeaderRect(columnIndex);
                             text.setText(column.getHeaderValue().toString());
                             renamePopup.setPreferredSize(
                             new Dimension(columnRectangle.width, columnRectangle.height - 1));
                             renamePopup.show(header, columnRectangle.x, 0);
                             text.requestFocusInWindow();
                             text.selectAll();
                         }
                    }
                    private void renameColumn() {
                         column.setHeaderValue(text.getText());
                         listEntete.put(nameRemplace, text.getText());
                         renamePopup.setVisible(false);
                         header.repaint();
                    }
                    Bonne continuation.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 août 2014 à 21:26:56

                      oui il y'a pas mal de code à connaitre sur la programmation d'un JTable  et ses constituants . J'ai regroupé  tous ces codes concernant l'édition  des entêtes  de  colonnes .Je me suis  confronté à certains problèmes  .La première est quand j’insère le code qui me permet de changer l'ancien nom par le nouveau  il  modifie carrément   le programme et m'affiche une exception (voir ligne 113 du code).le deuxième problème est que 

                      je n'arrive pas à rendre nom éditable la colonne  "marchandise"  et "utilisation" je me demande si j'ai mal inséré le code qui me le permet.Je l'ai inséré voir ligne compris entre 174-186 .C'est seulement par curiosité .Mais l'objet principale d'édition  des colonnes avec la souris concerné uniquement la colonne "marchandise" et "utilisation" sans modifier le programme .Si je pouvez contourner ce grand problème. Et j’essaie de bien comprendre les code que tu vient de me donner et merci pour le cours que tu m'a proposé de lire sur la collection d'objet.

                      Voici le code  que j'ai

                      import java.awt.BorderLayout;
                      import java.awt.Color;
                      import java.awt.Dimension;
                      import java.awt.Point;
                      import java.awt.Rectangle;
                      import java.awt.event.ActionEvent;
                      import java.awt.event.ActionListener;
                      import java.awt.event.MouseAdapter;
                      import java.awt.event.MouseEvent;
                      import java.util.HashMap;
                      import java.util.Vector;
                      import javax.swing.BorderFactory;
                      import javax.swing.DefaultCellEditor;
                      import javax.swing.JButton;
                      import javax.swing.JComboBox;
                      import javax.swing.JFrame;
                      import javax.swing.JPopupMenu;
                      import javax.swing.JScrollPane;
                      import javax.swing.JTable;
                      import javax.swing.JTextField;
                      import javax.swing.border.MatteBorder;
                      import javax.swing.table.DefaultTableModel;
                      import javax.swing.table.JTableHeader;
                      import javax.swing.table.TableColumn;
                      public class Main extends JFrame {
                          private JTable table;
                          private JTableHeader header;
                          private JPopupMenu renamePopup;
                          private JTextField text;
                          private TableColumn column;
                          private JButton ajout;
                          DefaultTableModel tableur;
                          JScrollPane entete;
                          private String nameRemplace;
                          private HashMap<String, String> listEntete;
                           public Main(){
                      	  listEntete = new HashMap<String, String>();
                      	     listEntete.put("marchandisee", "marchandisee");
                      	     listEntete.put(" poid en kg", " poid en kg");
                      	     listEntete.put("prix 1", "prix 1");
                      	     listEntete.put("prix 2", "prix 2");
                      	     listEntete.put("prix3", "prix3");
                      	     listEntete.put("utilisation", "utilisation");
                              ajout = new JButton(" Ajouter une colonne");
                              ajout.addActionListener(new ActionListener(){
                                  public void actionPerformed(ActionEvent e){        
                                      } 
                              });         
                          add(ajout, BorderLayout.SOUTH);
                          this.setLocationRelativeTo(null);
                          this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                          this.setTitle("JTable");
                          this.setSize(600, 200);
                          ajout.addActionListener(new ActionListener() {
                              public void actionPerformed(ActionEvent e) {
                               int size =tableur.getRowCount();
                               Vector ColumNames=createDataVector("column",size);
                               int nbColumn = table.getColumnCount() - 2;
                               String name="Prix "+nbColumn;
                      //         String name="Price"+tableur.getColumnCount();
                               insertColumn(5, name, ColumNames);
                               poid(table);
                               //tableur.addColumn(name,ColumNames);
                                
                              }
                              private Vector createDataVector(String string,int size){
                               return null;
                              }
                             });
                           
                          //Les données du tableau
                          Object[][] data = {
                            {"rice","12","$18", "$15","$12", ""},
                            {"millet","8","$20","$17", "$15", ""},
                            {"corn","10", "$14","$13","$12", ""},
                          };
                        
                          //Les titres des colonnes
                          String  title[] = {"marchandisee"," poid en kg", "prix 1", "prix 2","prix 3","utilisation"};
                          tableur = new  DefaultTableModel(data, title);
                          table = new JTable(tableur){
                          	 public boolean isCellEditable(int rowIndex, int colIndex) {
                                   table.getColumnModel().getColumn(0);
                                   int ligne = 0;
                                   while(!((String)table.getColumnModel().getColumn(ligne).getHeaderValue()).equals(listEntete.get("marchandisee"))) {
                                        ligne++;
                                   }
                                    
                                   int ligne1 = 0;
                                   while(!((String)table.getColumnModel().getColumn(ligne1).getHeaderValue()).equals(listEntete.get("utilisation"))) {
                                        ligne1++;
                                   }
                                   if ((colIndex==ligne || (colIndex==ligne1))) return false;
                                   else return true;
                              }
                         };
                         //+++++++++++++++++++++++++
                        
                         //+++++++++++++++++++++++++++++
                          poid(table);
                          entete= new JScrollPane(table);
                          table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
                          table.setColumnSelectionAllowed(true);
                          add(entete, BorderLayout.NORTH);
                        }
                      
                        public void insertColumn(int column, String name, Vector columnData) {
                      	     tableur.addColumn(name, columnData);
                      	     int nbColumSup = table.getColumnCount() - 6;
                      	     for (int i = 0; i < nbColumSup; i++) table.moveColumn(table.getColumnCount()-1, column);
                      	     listEntete.put(name, name);
                      	     //------"replaceName();" est à l'origine du probléme de remplacement de l'ancien nom par le nouveau si on l'active ------------------
                         replaceName();
                         //--------------------------------------------------------------------------------------------------------------------------
                      	} 
                          public void poid(JTable table) {
                              JComboBox  jcbocoeff = new JComboBox();
                              jcbocoeff.addItem("10 ");
                              jcbocoeff.addItem("11 ");
                              jcbocoeff.addItem("12 ");
                              jcbocoeff.addItem("13 ");
                              jcbocoeff.addItem("14 ");
                              jcbocoeff.addItem("15 ");
                              jcbocoeff.addItem("16 ");
                              jcbocoeff.addItem("17 ");
                              jcbocoeff.addItem("18 ");
                              jcbocoeff.addItem("19 ");
                              jcbocoeff.addItem("20 ");
                              TableColumn poid = table.getColumn(" poid en kg");
                              poid.setCellEditor(new DefaultCellEditor(jcbocoeff));
                           header = table.getTableHeader();
                          header.addMouseListener(new MouseAdapter(){
                            @Override
                            public void mouseClicked(MouseEvent event)
                            {
                              if (event.getClickCount() == 2)
                              {
                                editColumnAt(event.getPoint());
                              }
                            }
                          });
                      
                          text = new JTextField();
                          text.setBorder(BorderFactory.createLineBorder(Color.CYAN));
                      
                          text.setBorder(null);
                          text.addActionListener(new ActionListener(){
                            public void actionPerformed(ActionEvent e)
                            {
                              renameColumn();
                            }
                          });
                      
                          renamePopup = new JPopupMenu();
                          renamePopup.setBorder(new MatteBorder(0, 1, 1, 1, Color.DARK_GRAY));
                          renamePopup.add(text);
                        }
                        private void editColumnAt(Point p)
                        {
                          int columnIndex = header.columnAtPoint(p);
                      
                          if (columnIndex != -1)
                          {
                            column = header.getColumnModel().getColumn(columnIndex);
                            Rectangle columnRectangle = header.getHeaderRect(columnIndex);
                            text.setText(column.getHeaderValue().toString());
                            renamePopup.setPreferredSize(
                                new Dimension(columnRectangle.width, columnRectangle.height - 1));
                            renamePopup.show(header, columnRectangle.x, 0);
                      
                            text.requestFocusInWindow();
                            text.selectAll();
                          }
                          //--- pour rentre les entêtes de "marchandisee" et "utilisation", non modifiable  mais  ça ne marche pas----------------------------------------------- 
                          if (!column.getHeaderValue().equals("marchandisee") && !column.getHeaderValue().equals("utilisation")) {
                              Rectangle columnRectangle = header.getHeaderRect(columnIndex);
                          
                              text.setText(column.getHeaderValue().toString());
                              renamePopup.setPreferredSize(
                              new Dimension(columnRectangle.width, columnRectangle.height - 1));
                              renamePopup.show(header, columnRectangle.x, 0);
                          
                              text.requestFocusInWindow();
                              text.selectAll();
                         }
                          //----------------------------------------------------------------------------------------------------
                        }
                      
                        private void renameColumn()
                        {
                          column.setHeaderValue(text.getText());
                          renamePopup.setVisible(false);
                          header.repaint();
                        }
                        // --------------------on remplace l'ancien nom par le nouveau.------------------------------------------------------------
                        public void replaceName() {
                      	     for (int i = 0; i < table.getColumnCount(); i++) {
                      	          String nameColumn = (String)table.getColumnModel().getColumn(i).getHeaderValue();
                      	          table.getColumnModel().getColumn(i).setHeaderValue(listEntete.get(nameColumn));
                      	     }
                      	}
                        //---------------------------------------------------------------------------------------------------------------------------
                        public static void main(String[] args){
                          Main fen = new Main();
                          fen.setVisible(true);
                        }
                      }


                      conçu

                      • Partager sur Facebook
                      • Partager sur Twitter
                        19 août 2014 à 23:14:41

                        Bonsoir,

                        Vu l'heure, je ne vais pas vous d'écrire le code, mais j'ai l'impression que vous ne l'avez pas compris. Est-ce que vous pouvez me l'expliquer ?

                        En fait ça donne ceci (et vous n'êtes pas obligé de rendre les noms des colonnes "marchandise" et "utilisation", non modifiable, mais vous pouvez me dire pourquoi?).

                        Avant de d'écrire, je vais attendre de voir vos réponses.

                        import java.awt.BorderLayout;
                        import java.awt.Color;
                        import java.awt.Dimension;
                        import java.awt.Point;
                        import java.awt.Rectangle;
                        import java.awt.event.ActionEvent;
                        import java.awt.event.ActionListener;
                        import java.awt.event.MouseAdapter;
                        import java.awt.event.MouseEvent;
                        import java.util.HashMap;
                        import java.util.Vector;
                        import javax.swing.BorderFactory;
                        import javax.swing.DefaultCellEditor;
                        import javax.swing.JButton;
                        import javax.swing.JComboBox;
                        import javax.swing.JFrame;
                        import javax.swing.JPopupMenu;
                        import javax.swing.JScrollPane;
                        import javax.swing.JTable;
                        import javax.swing.JTextField;
                        import javax.swing.border.MatteBorder;
                        import javax.swing.table.DefaultTableModel;
                        import javax.swing.table.JTableHeader;
                        import javax.swing.table.TableColumn;
                        
                        public class Main extends JFrame {
                            
                                private JTable table;
                            private JTableHeader header;
                            private JPopupMenu renamePopup;
                            private JTextField text;
                            private TableColumn column;
                            private JButton ajout;
                            DefaultTableModel tableur;
                            JScrollPane entete;
                            private String nameRemplace;
                            private HashMap<String, String> listEntete;
                             public Main(){
                              listEntete = new HashMap<String, String>();
                                 listEntete.put("marchandisee", "marchandisee");
                                 listEntete.put(" poid en kg", " poid en kg");
                                 listEntete.put("prix 1", "prix 1");
                                 listEntete.put("prix 2", "prix 2");
                                 listEntete.put("prix 3", "prix 3");
                                 listEntete.put("utilisation", "utilisation");
                                ajout = new JButton(" Ajouter une colonne");
                                ajout.addActionListener(new ActionListener(){
                                    public void actionPerformed(ActionEvent e){        
                                        } 
                                });         
                            add(ajout, BorderLayout.SOUTH);
                            this.setLocationRelativeTo(null);
                            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                            this.setTitle("JTable");
                            this.setSize(600, 200);
                            ajout.addActionListener(new ActionListener() {
                                public void actionPerformed(ActionEvent e) {
                                 int size =tableur.getRowCount();
                                 Vector ColumNames=createDataVector("column",size);
                                 int nbColumn = table.getColumnCount() - 2;
                                 String name="Prix "+nbColumn;
                        //         String name="Price"+tableur.getColumnCount();
                                 insertColumn(5, name, ColumNames);
                                 poid(table);
                                 //tableur.addColumn(name,ColumNames);
                                   
                                }
                                private Vector createDataVector(String string,int size){
                                 return null;
                                }
                               });
                              
                            //Les données du tableau
                            Object[][] data = {
                              {"rice","12","$18", "$15","$12", ""},
                              {"millet","8","$20","$17", "$15", ""},
                              {"corn","10", "$14","$13","$12", ""},
                            };
                           
                            //Les titres des colonnes
                            String  title[] = {"marchandisee"," poid en kg", "prix 1", "prix 2","prix 3","utilisation"};
                            tableur = new  DefaultTableModel(data, title);
                            table = new JTable(tableur){
                                 public boolean isCellEditable(int rowIndex, int colIndex) {
                                     table.getColumnModel().getColumn(0);
                                     int ligne = 0;
                                     while(!((String)table.getColumnModel().getColumn(ligne).getHeaderValue()).equals(listEntete.get("marchandisee"))) {
                                          ligne++;
                                     }
                                       
                                     int ligne1 = 0;
                                     while(!((String)table.getColumnModel().getColumn(ligne1).getHeaderValue()).equals(listEntete.get("utilisation"))) {
                                          ligne1++;
                                     }
                                     if ((colIndex==ligne || (colIndex==ligne1))) return false;
                                     else return true;
                                }
                           };
                           //+++++++++++++++++++++++++
                           
                           //+++++++++++++++++++++++++++++
                            poid(table);
                            entete= new JScrollPane(table);
                            table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
                            table.setColumnSelectionAllowed(true);
                            add(entete, BorderLayout.NORTH);
                            editHeadColumn();
                          }
                         
                          public void insertColumn(int column, String name, Vector columnData) {
                                 tableur.addColumn(name, columnData);
                                int nbColumSup = table.getColumnCount() - 6;
                                for (int i = 0; i < nbColumSup; i++) table.moveColumn(table.getColumnCount()-1, column);
                                listEntete.put(name, name);
                                 //------"replaceName();" est à l'origine du probléme de remplacement de l'ancien nom par le nouveau si on l'active ------------------
                           replaceName();
                           //--------------------------------------------------------------------------------------------------------------------------
                            } 
                            public void poid(JTable table) {
                                JComboBox  jcbocoeff = new JComboBox();
                                jcbocoeff.addItem("10 ");
                                jcbocoeff.addItem("11 ");
                                jcbocoeff.addItem("12 ");
                                jcbocoeff.addItem("13 ");
                                jcbocoeff.addItem("14 ");
                                jcbocoeff.addItem("15 ");
                                jcbocoeff.addItem("16 ");
                                jcbocoeff.addItem("17 ");
                                jcbocoeff.addItem("18 ");
                                jcbocoeff.addItem("19 ");
                                jcbocoeff.addItem("20 ");
                                TableColumn poid = table.getColumn(listEntete.get(" poid en kg"));
                                poid.setCellEditor(new DefaultCellEditor(jcbocoeff));
                                }
                            
                            public void editHeadColumn() {
                             header = table.getTableHeader();
                                header.addMouseListener(new MouseAdapter(){
                                    @Override
                                    public void mouseClicked(MouseEvent event) {
                                        if (event.getClickCount() == 2) {
                                            editColumnAt(event.getPoint());
                                        }
                                    }
                                });
                                
                                text = new JTextField();
                                text.setBorder(null);
                                text.addActionListener(new ActionListener(){
                                    public void actionPerformed(ActionEvent e) {
                                        renameColumn();
                                    }
                                });
                                
                                renamePopup = new JPopupMenu();
                                renamePopup.setBorder(new MatteBorder(0, 1, 1, 1, Color.DARK_GRAY));
                                renamePopup.add(text);
                          }
                          private void editColumnAt(Point p)
                          {
                            int columnIndex = header.columnAtPoint(p);
                                if (columnIndex != -1) {
                                    column = header.getColumnModel().getColumn(columnIndex);
                                    for (String value : listEntete.keySet()) {
                                        if (listEntete.get(value).equals(column.getHeaderValue())) nameRemplace = value;
                                    }
                                    if (!nameRemplace.equals("marchandisee") && !nameRemplace.equals("utilisation")) {
                                    Rectangle columnRectangle = header.getHeaderRect(columnIndex);
                        
                                    text.setText(column.getHeaderValue().toString());
                                    renamePopup.setPreferredSize(
                                            new Dimension(columnRectangle.width, columnRectangle.height - 1));
                                    renamePopup.show(header, columnRectangle.x, 0);
                                    
                                    text.requestFocusInWindow();
                                    text.selectAll();
                                    }
                                }
                            //----------------------------------------------------------------------------------------------------
                          }
                         
                          private void renameColumn()
                          {
                            column.setHeaderValue(text.getText());
                            listEntete.put(nameRemplace, text.getText());
                            renamePopup.setVisible(false);
                            header.repaint();
                          }
                          // --------------------on remplace l'ancien nom par le nouveau.------------------------------------------------------------
                          public void replaceName() {
                                 for (int i = 0; i < table.getColumnCount(); i++) {
                                      String nameColumn = (String)table.getColumnModel().getColumn(i).getHeaderValue();
                                      table.getColumnModel().getColumn(i).setHeaderValue(listEntete.get(nameColumn));
                                 }
                            }
                          //---------------------------------------------------------------------------------------------------------------------------
                          public static void main(String[] args){
                            Main fen = new Main();
                            fen.setVisible(true);
                          }
                            
                        }

                        Bonne continuation.

                        • Partager sur Facebook
                        • Partager sur Twitter
                          20 août 2014 à 3:08:25

                          •                                       Bonsoir

                          pour l'instant je ne peut pas vous dire si j'ai bien compris les codes parce que les codes commencent à être nombreux et je me perd souvent quand j'essai de les combiner .Ainsi je suis entrain de comparer le code que je vous ai envoyé et celle que j'ai reuçi pour situer mes erreurs et les rectifier .J essai de mettre quelques commentaires si possible. Le  fait que je veux éditer les colonnes "marchandises" et "utilisation" est du au nationalité de celui qui utilise ce programme.si c'est d'autres nationalités différent du français ils ne vont pas dire  "marchandises" ou "utilisation".Je veux aussi donner à celui qui utilise ce programme la possibilité d'écrire "marchandises" et "utilisation"en majuscule entier ou en minuscule entier ou bien de commencer par une majuscule .Il y'a aussi le couleurs;les fonts ;police  ...

                          Merci pour tous l'aide que vous m'apportez 

                          • Partager sur Facebook
                          • Partager sur Twitter
                            20 août 2014 à 11:51:39

                            Bonjour,

                            Prenez votre temps pour bien comprendre et si des parties sont trop compliquées, je vais vous les expliquer, mais surtout prenez votre temps, n'allez pas trop vite. Il y a beaucoup de code d'un coup, je le comprends et je pense qu'il vous faut du temps, vu que vous débutez.

                            Pour les couleurs et fond vous pouvez toujours regarder de ce côté :

                            http://www.developpez.net/forums/d616661/java/interfaces-graphiques-java/awt-swing/composants/tables/changer-couleur-fond-cellule-jtable/

                            Bonne continuation.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              20 août 2014 à 12:49:14

                              Commençons par la fonction principale (le constructeur par défaut):
                              listEntete = new HashMap<String, String>();
                              listEntete.put("marchandisee", "marchandisee");
                              listEntete.put(" poid en kg", " poid en kg");
                              listEntete.put("prix 1", "prix 1");
                              listEntete.put("prix 2", "prix 2");
                              listEntete.put("prix 3", "prix 3");
                              listEntete.put("utilisation", "utilisation");

                              Celui si nous sert à connaître le nouveau nom par rapport à l'ancien nom :

                              listEntete.put(ancienNom, nouveauNom);
                              int ligne = 0;
                              while(!((String)table.getColumnModel().getColumn(ligne).getHeaderValue()).equals(listEntete.get("marchandisee"))) {
                                   ligne++;
                              }

                              Ici on regarde le nom de toutes les colonnes et on le compare avec l'ancien nom (vu qu'on ne connaît pas le nouveau).

                              ((String)table.getColumnModel().getColumn(ligne).getHeaderValue()).equals(listEntete.get(ancienNom))) {

                              ****************

                              Maintenant la fonction insertColumn :

                              listEntete.put(name, name);

                              On crée une nouvelle colonne, donc on le place dans le tableau, pour garder le nom entré et aussi pouvoir le modifier ensuite. Comme la colonne vient juste d'être créé, on n'a pas d'ancien nom, donc on met le même pour les deux (ancien et nouveau).

                              ****************

                              Maintenant la fonction replaceName :

                              Attention, cette partie ne fonctionne que lors de la reconstruction de la table et que celui-ci a repris ces anciens noms.

                              On parcourt toutes les colonnes du tableau.

                              for (int i = 0; i < table.getColumnCount(); i++) {

                              On récupère l'ancien nom.

                              String nameColumn = (String)table.getColumnModel().getColumn(i).getHeaderValue();

                              A partir de l'ancien nom on écrit le nouveau dans l'entête de la colonne.

                              table.getColumnModel().getColumn(i).setHeaderValue(listEntete.get(nameColumn));
                              Vous comprenez déjà cette partie ? (on verra la suite après, on va aller en douceur).
                              • Partager sur Facebook
                              • Partager sur Twitter
                                20 août 2014 à 20:05:49

                                Je comprend parfaitement .C'est très bien détaillé. En allant pas à pas ça nous aide nous les  débutants à mieux comprendre.Merci énormément pour tous le temps consacré à nous aider que Dieu le tous puissant vous paie.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  21 août 2014 à 1:15:06

                                  Bonsoir,

                                  La fonction editHeadColumn à mettre lors de la création de la fenêtre donc dans le constructeur.

                                  Pour récupérer l'entête de la table.

                                  header = table.getTableHeader();

                                  Je passe le addMouseListener que vous devez connaître, déjà utiliser dans le programme initial.

                                  On crée un JtextField sans bordure (c'est pour entrer du texte).

                                  text = new JTextField();
                                  text.setBorder(null);

                                  renamePopup = new JpopupMenu(); 


                                  On place sur la tête de la colonne qu'on veut modifier, un Jpanel (en fait c'est un JpopupMenu, mais pour simplifier voyez le comme un Jpanel qui s'affiche lorsque l'on clique).

                                  renamePopup.setBorder(new MatteBorder(0, 1, 1, 1, Color.DARK_GRAY));
                                  renamePopup.add(text);

                                  On place des bordures sur le JpopupMenu, mais sans mettre de bordure en haut et on place l'éditeur de texte dedans. On modifie le nom par un cache, car la colonne est toujours derrière. Le JpopupMenu n'est pas visible même si on le crée ici, on ne le voit pas.

                                  **********

                                  La fonction editColumnAt(Point p)

                                  le p sert à déterminer la colonne qui a été cliqué. C'est le point de la sourie.

                                  int columnIndex = header.columnAtPoint(p);

                                  Ici on détermine si la sourie est sur l'entête de colonne 0, 1, 2, etc.....

                                  On récupère le numéro de la colonne.

                                  Ensuite on vérifie qu'une colonne a été sélectionnée.

                                  if (columnIndex != -1) {

                                  On récupère la colonne :

                                  column = header.getColumnModel().getColumn(columnIndex);

                                  On liste les anciens noms de colonne :

                                  for (String value : listEntete.keySet()) {

                                  On récupère le nouveau et on le compare avec celui de la colonne, pour connaître l'ancien nom (pour remplacer la valeur de la bonne colonne) :

                                  if (listEntete.get(value).equals(column.getHeaderValue())) nameRemplace = value;

                                  Ne pas modifier la colonne « marchandisee » et « utilisation ».

                                  if (!nameRemplace.equals("marchandisee") && !nameRemplace.equals("utilisation")) {


                                  On construit un rectangle pour cacher l'entête de colonne :

                                  Rectangle columnRectangle = header.getHeaderRect(columnIndex);

                                  On place le nom actuel dans la JtextField :

                                  text.setText(column.getHeaderValue().toString());

                                  On affiche le JpopupMenu qui recouvre la tête de la colonne :

                                  renamePopup.setPreferredSize(
                                  new Dimension(columnRectangle.width, columnRectangle.height - 1));
                                  renamePopup.show(header, columnRectangle.x, 0);
                                  On sélectionne le texte :
                                  text.selectAll();

                                  Reste plus qu'une fonction très simple, vous pouvez me l'expliquer ?

                                  Désolé pour le retard.

                                  Bonne continuation.

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    21 août 2014 à 11:47:26

                                    Bonjour,

                                    On va voir la dernière fonction renameColumn :

                                    On place le nouveau nom dans l'entete de la colonne :

                                    column.setHeaderValue(text.getText());

                                    On enregistre le nouveau nom dans le tableau listEntete :

                                    listEntete.put(nameRemplace, text.getText());

                                    On ferme renamePopup (plus besoin d'éditer la colonne) :

                                    renamePopup.setVisible(false);

                                    On rafraîchie header.repaint(); (les entête de la Jtable, pour voir le nouveau nom) :

                                    header.repaint();

                                    ********

                                    Maintenant, je refais l'explication simplifier, pour que vous puissiez comprendre tout ce qui a été dit.

                                    Pour expliquer, j'ai changé l'ancien nom de colonne par "colonneX", mais c'est juste pour expliquer.

                                    listEntete = new HashMap<String, String>();
                                    listEntete.put("colonne 1", "marchandisee");
                                    listEntete.put("colonne 2", " poid en kg");
                                    listEntete.put("colonne 3", "prix 1");
                                    listEntete.put("colonne 4", "prix 2");
                                    listEntete.put("colonne 5", "prix 3");
                                    listEntete.put("colonne 6", "utilisation");
                                    Ici listEntete.get("colonne 6") == "utilisation". Dans le cas présent, pour utiliser listEntete.get("colonne X"), il faut pouvoir retrouver les valeurs dans les premières colonnes du tableau.

                                    Ensuite, le nouveau nom dans le tableau "listEntete" doit être égale au nom de colonne, sinon le programme ne pourra pas fonctionner.

                                    Pour éditer les colonnes, on place en attente "JpopupMenu[renamePopup]" comme l'exemple suivant :

                                    Si on clique sur la colonne utilisation, on place ce "JpopuMenu" devant l'entête de la colonne "utilisation", comme l'exemple qui suit :

                                    Vous voyez c'est très simple.

                                    On change le nom de colonne "utilisation" par "tintin", on aura le tableau "listEntete" suivant :

                                    listEntete.put("colonne 1", "marchandisee");
                                    listEntete.put("colonne 2", " poid en kg");
                                    listEntete.put("colonne 3", "prix 1");
                                    listEntete.put("colonne 4", "prix 2");
                                    listEntete.put("colonne 5", "prix 3");
                                    listEntete.put("colonne 6", "tintin");

                                    Maintenant on change le nom de colonne "tintin" par "milou", on aura le tableau "listEntete" suivant :

                                    listEntete.put("colonne 1", "marchandisee");
                                    listEntete.put("colonne 2", " poid en kg");
                                    listEntete.put("colonne 3", "prix 1");
                                    listEntete.put("colonne 4", "prix 2");
                                    listEntete.put("colonne 5", "prix 3");
                                    listEntete.put("colonne 6", "milou");

                                    Dans la fenêtre on ne voit jamais la première colonne, mais il est très utile pour connaître le nouveau nom, je ne sais pas si je suis claire.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      21 août 2014 à 23:23:29

                                      c'est  cool je suis entrain de bien suivre vos explications

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        22 août 2014 à 10:29:02

                                        Bonjour,

                                        Si vous attendez la suite des explications, c'est que vous avez dû louper des étapes, car elles sont finis. Je vous laisse le temps d'étudier tout ça.

                                        Bonne continuation.

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          23 août 2014 à 23:10:32

                                          Nom je voulais tester mes compétences.Je voulais éditer la colonne "Pseudo" par une double clique en  suivant  vos méthode bien détaillés.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            24 août 2014 à 11:20:52

                                            Bonjour,

                                            Il n'y a pas de colonne "speudo" dans votre "Jtable".

                                            Bonne continuation.

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              24 août 2014 à 15:38:58

                                              Bonsoir

                                              Je me suis trompé.Comme hier tard la nuit j'étais  entrain de lire la discussion  entre vous et "Vieux96".J'ai même fait  des essais.C'est pourquoi j'ai confondu les colonnes.En faite je voulais éditer les cellules de la colonne "Marchandise" en faisant un double clique . De la même façon que  les entêtes  de colonnes.Je suis désolé et je m'en excuse.

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                24 août 2014 à 15:53:19

                                                Bonjour,

                                                Vous n'avez pas vu :

                                                Ne pas modifier la colonne « marchandisee » et « utilisation ».

                                                if (!nameRemplace.equals("marchandisee") && !nameRemplace.equals("utilisation")) {

                                                Il suffit de supprimer cette ligne, c'est tous simple.

                                                Vous n'avez pas du tous compris le code. Vous pouvez m'envoyer un message en placent sous chaque ligne de code, le résultat (juste voir que vous avez bien compris).

                                                Bonne continuation.



                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  24 août 2014 à 18:33:32

                                                  Le  problème est que j'explique mal.En faite je vais vous donner un exemple de ce que je veux faire. Au niveau du programme d'insertion de ligne que mon ami "vieux96" vous a envoyé en discution . Supposons que vous insérez une ligne et que vous saisissez le "PSeudo" et "l'age"puis vous validez par ok. Sur le tableau vous voyez la ligne insérée mais vous remarquez que vous avez mal saisi le "Pseudo.Alors vous décidez de le modifier en faisant une double clique sur la cellule du "Pseudo" mal saisi .Ainsi en faisant une double clique sur la cellule du "Psseudo" mal saisi ; cette cellule devient éditable puis on fait nos modifications. Ainsi on valide par entrer avec le clavier ou en cliquant sur une autres cellules les modifications apportés. J’espère que vous avez une aperçue de ce que je voulais dire.Merci au fond du cœur d’être jamais découragé à m'aider sur mes lacunes.

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    24 août 2014 à 19:42:16

                                                    Je ne comprends pas vraiment l'idée, mais bon.

                                                    Si on veut juste que la première cellule de la colonne Marchandisee soit éditable, il faut faire :

                                                    public boolean isCellEditable(int rowIndex, int colIndex) {
                                                                 table.getColumnModel().getColumn(0);
                                                                 int column = 0;
                                                                 while(!((String)table.getColumnModel().getColumn(column).getHeaderValue()).equals(listEntete.get("marchandisee"))) {
                                                                      column++;
                                                                 }
                                                                   
                                                                 int column1 = 0;
                                                                 while(!((String)table.getColumnModel().getColumn(column1).getHeaderValue()).equals(listEntete.get("utilisation"))) {
                                                                      column1++;
                                                                 }
                                                                 if (colIndex==column && rowIndex!=0) return false; // la première cellule de la colonne Marchandisee soit éditable
                                                                 if (colIndex==column1) return false;
                                                                 else return true;
                                                            }

                                                    Si on veut juste que la cellule qui a pour valeur "corn" soit éditable, il faut remplacer la ligne :

                                                    if (colIndex==column && rowIndex!=0) return false;

                                                    Par :

                                                    if (colIndex==column && !((String)table.getValueAt(rowIndex, column)).equals("corn")) return false;

                                                    Bonne continuation.

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      25 août 2014 à 19:13:35

                                                      Merci beaucoup ce n'est pas grave. comment ajouter une colonne  dont l’entête de colonne sera "nouveau colonne" avant la colonne sélectionnée. C'est à dire on ne fixe pas la position de la colonne comme on l'avait fait au par avant avec les prix  mais on l'insertion sera fait à la  position voulue de l'utilisateur.
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        25 août 2014 à 22:17:42

                                                        Bonsoir,

                                                        C'est très simple, il faut faire ceci, mais n'oubliez pas de faire un tableau et de conserver les emplacements des colonnes.

                                                        ajout.addActionListener(new ActionListener() {
                                                                public void actionPerformed(ActionEvent e) {
                                                                 int size =tableur.getRowCount();
                                                                 Vector ColumNames=createDataVector("column",size);
                                                                 int column = table.getSelectedColumn();
                                                                 String name="nouveau colonne";
                                                                 if (column != -1) insertColumn(column, name, ColumNames);
                                                                 else tableur.addColumn(name,ColumNames);
                                                                 poid(table);
                                                                }
                                                                private Vector createDataVector(String string,int size){
                                                                 return null;
                                                                }
                                                               });

                                                        Je vous laisse trouver une solution pour garder l'emplacement des colonnes .
                                                        Bonne continuation.

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          26 août 2014 à 3:00:05

                                                          C'est à  dire  "garder l'emplacement des colonnes" j'ai du mal à comprendre ce que vous voulez dire. Merci le code fonctionne
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            26 août 2014 à 10:27:09

                                                            Bonjour,

                                                            | marchandisee | poid en kg | prix 1 | prix 2 | prix 3 | utilisation |

                                                            On ajoute une colonne avant prix 1 :

                                                            | marchandisee | poid en kg | nouvelle colonne | prix 1 | prix 2 | prix3 | utilisation |

                                                            On ajoute maintenant une colonne avant poid en kg :

                                                            | marchandisee | nouvelle colonne | nouvelle colonne | poid en kg | prix 1 | prix 2 | prix3 | utilisation |

                                                            La colonne avant prix 1 c'est déplacé.

                                                            Ca vient de la fonction insertColumn(int column, String name, Vector columnData) :

                                                            for (int i = 0; i < nbColumSup; i++) table.moveColumn(table.getColumnCount()-1, column);

                                                            Faut la remplacer par un tableau qui garde en mémoire les emplacements des colonnes.

                                                            Un tableau du Style :

                                                            private HashMap<Integer, String> colonneJTable;
                                                            colonneJTable = new HashMap<Integer, String>();
                                                            colonneJTable(Numéro de la colonne, ancien Nom de colonne).

                                                            C'est juste une idée.

                                                            Attention, si en plus on ajoute une colonne prix :

                                                            | marchandisee | poid en kg | nouvelle colonne | prix 1 | prix 2 | prix 3 | nouvelle colonne | nouvelle colonne | prix 6 | utilisation |

                                                            Le programme n'a pas été conçut pour rajouter des colonnes, mais vous avez tous les outils, pour résoudre le problème.

                                                            Bonne continuation.

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              27 août 2014 à 1:34:43

                                                              Bonsoir 

                                                              Suivant l'idé que vous m'avez donné j'ai conçu ce bout de code

                                                               colonneJTable = new HashMap<Integer, String>();
                                                                  	 colonneJTable.put(0,"marchandisee");
                                                                  	 colonneJTable.put(1," poid en kg");
                                                                  	 colonneJTable.put(2,"prix 1");
                                                                  	 colonneJTable.put(3,"prix 2");
                                                                  	 colonneJTable.put(4,"prix 3");
                                                                  	 colonneJTable.put(5,"utilisation");
                                                                      colonneJTable.put(column, name);
                                                              

                                                               Je ne vois pas de changement en l'insérant

                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              Colonne

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                              • Editeur
                                                              • Markdown