Partage
  • Partager sur Facebook
  • Partager sur Twitter

Colonne

Insérer une colonne selon la position voulu

    28 septembre 2014 à 0:32:55

    "import javax:swing:JTable;"c'est juste quand j'essayait de créer la class "ColumnNb"que je l'ai utilisé. C'était de trop.J'ai vu la documentationd de la classe .C'est trés bien détaillée. la commentaire des paramétres est il necessaire de la faire.Moi je l'ai mis .C'est une question de choix ou pas.Je vais en profiter pour  avoir documenter de la classe "JTableColumn".J'ai pensé à vous montrer ce que j'ai débuté mais c'est que du mélange.Ce n'est pas beau à voir.Voici la classe

    import java.util.HashMap;
    import java.util.Vector;
    import javax.swing.JTable;
    import javax.swing.ListSelectionModel;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableColumnModel;
    /**
     *
     * @author pctronique
     */
    public class JTableColumn extends JTable {
        private DefaultTableModel tableur;
        private Object[][] rowData;
        private Object[] columnNames;
         /**
          * 
          * @param dm
          */
        public JTableColumn(DefaultTableModel dm) {
            super(dm);
            this.tableur = dm;
        }
         /**
          * 
          * @param dm
          * @param cm
          */
        public JTableColumn(DefaultTableModel dm, TableColumnModel cm) {
            super(dm, cm);
            this.tableur = dm;
        }
         /**
          * 
          * @param dm
          * @param cm
          * @param sm
          */
        public JTableColumn(DefaultTableModel dm, TableColumnModel cm, ListSelectionModel sm) {
            super(dm, cm, sm);
            this.tableur = dm;
        }
        /**
         * 
         * @param rowData
         * @param columnNames
         */
        public JTableColumn(Object[][] rowData, Object[] columnNames) {
            super();
            this.rowData = rowData;
            this.columnNames = columnNames;
            this.tableur = new  DefaultTableModel(this.rowData, this.columnNames);
            this.setModel(this.tableur);
        } 
        /**
         * 
         */
        private void rowColumn() {
            columnNames = new Object[this.getColumnCount()];
            for(int i = 0; i < this.getColumnCount(); i++) columnNames[i] = (String)this.getColumnModel().getColumn(i).getHeaderValue();
            rowData = new Object[this.getRowCount()][this.getColumnCount()];
            for (int i = 0; i < this.getRowCount(); i++)
                for(int j = 0; j < this.getColumnCount(); j++)
                    rowData[i][j] = this.getValueAt(i, j);
            tableur = new  DefaultTableModel(rowData, columnNames);
            this.setModel(tableur);
        }
         /**
          * 
          * @param columnName
          */
        public void addColumn(Object columnName){
            this.addColumn(columnName, (Object[])null);
        }
        /**
         *  
         * @param columnName
         * @param columnData
         */
        public void addColumn(Object columnName, Object[] columnData) {
            rowColumn();
            HashMap<Integer, String> colonneJTable = new HashMap<Integer, String>();
            for(int i = 0; i < this.getColumnCount(); i++)
                colonneJTable.put(i, (String)this.getColumnModel().getColumn(i).getHeaderValue());
            tableur.addColumn(columnName, columnData);
            for(int i = 0; i < colonneJTable.size(); i++) {
                int columnMod = 0;
                for (int j = 0; j < colonneJTable.size(); j++) {
                    if (this.getColumnModel().getColumn(j).getHeaderValue().equals(colonneJTable.get(i))) columnMod = j;
                }
                this.moveColumn(columnMod, i);
            }
            /**
             * 
             */
        }
        public void placeColumn() {
            rowColumn();
        } 
        /**
         * 
         * @param columnName
         * @param columnData
         */
        public void addColumn(Object columnName, Vector columnData) {
            if (columnData != null) this.addColumn(columnName, columnData.toArray(new Object[columnData.size()]));
            else this.addColumn(columnName, (Object[])null);
        }
         /**
          * 
          * @param column
          * @param columnName
          */
        public void insertColumn(int column, Object columnName){
            this.insertColumn(column, columnName, (Object[])null);
        }
        /**
         *  
         * @param column
         * @param columnName
         * @param columnData
         */
        public void insertColumn(int column, Object columnName, Object[] columnData) {
            addColumn(columnName, columnData);
            this.moveColumn(this.getColumnCount()-1, column);
        }
        /**
         *  
         * @param column
         * @param columnName
         * @param columnData
         */
        public void insertColumn(int column, String columnName, Vector columnData) {
            if (columnData != null) this.insertColumn(column, columnName, columnData.toArray(new Object[columnData.size()]));
            else this.insertColumn(column, columnName, (Object[])null);
        } 
    }

    J'ai éffacé tous les commentaires que j'avais fait car je sais bien que ce n'est pas correcte.

    Merci

    • Partager sur Facebook
    • Partager sur Twitter
      28 septembre 2014 à 12:33:08

      Bonjour,
      On travaille sur cette classe depuis le 27 août 2014 à 23:51:59, ça fait un mois que vous travaillez avec une classe sans connaître le fonctionnement de ces méthodes. Pour information les méthodes addColumn et insertColumn sont aussi dans la classe JtableEditHead qui a été commenté. Ensuite, les méthodes rowColumn et placeColumn sont identiques sauf que l'un est en private et l'autre en public.

      rowColumn :

      /* reconstruit une nouvelle table, en replacent les colonnes dans un ordre choisi, en affectant leurs nouveaux nom et en replacent les valeurs des cellules dans la nouvelle table. Il supprime l'ancienne table pour la remplacer par la nouvelle. */

      PlaceColum :

      /* Avant de pouvoir utiliser la méthode getModel() on doit ré-initialiser l'emplacement des colonnes. Donc utiliser cette méthode si la table a été modifiée (déplacement de colonne par exemple) avant d'utiliser la méthode getModel(). */

      Dans mes codes, je ne mets jamais de commentaire avec des accents ou caractère spéciaux (pour que celui-ci puisse être lu sur n'importe quel pc ;)). Chaque développeur programme à sa façon ;).

      Bonne continuation.

      • Partager sur Facebook
      • Partager sur Twitter
        29 septembre 2014 à 3:06:55

        Je devais vous montrer la façon dont j'ai commentée la classe "TableColumn".Vu la façon dont vous avez documentée la classe "ColumnNb" j'ai vu que j'ai rien fait de bon. Mais domage pour moi j'ai effacer mes commentaires au niveau de la classe "JTableColumn" .A travers le nom des méthodes que vous donnez, on peut avoir une idée de son role .Oui vous avez raison je doit bien connaitre les méthodes pour pouvoir les modifier. Je fais m'appliquer sur cela.  

        les fonctions addColumn et insertColumn méme s'ils ont le méme nom dans  "JTableColumn" et "JTableEditHead", ils ont des contenues différents .

        Les constructeurs par références je les ai connues grace aux commentaires de la classe "ColumnNb" .Méme au niveau de la classe "JTableColumn"

        je n'arrive pas à bien les commenter.

        Merci

        • Partager sur Facebook
        • Partager sur Twitter
          29 septembre 2014 à 18:21:34

          Bonsoir,

          JtableEditHead hérite de la classe JtableColumn, donc si c'est la même chose. La différence provient seulement de la classe. On décrit le travail de la méthode et non pas le contenu. Si vraiment ça vous pose problème, il faut mettre des commentaires dans la méthode. Vos questions me font très peurs, j'ai l'impression que vous ne pourrez pas faire la maintenance des classes, seule. Transmettez-moi par message MP, les classes avec des commentaires bien détaillés (même dans les méthodes), pour me rassurer. Je n'ai pas inventé de nouvelles méthodes, tous vient du code déjà étudié.

          Bonne continuation.

          • Partager sur Facebook
          • Partager sur Twitter
            30 septembre 2014 à 4:15:23

            Bonoir

            C'est tres tard .J'ai un peu précipité mes commentaires de la classe "JTableColumn".Il se peut que je fasse des erreurs de grammaire.

            Les 3 point de suspension au niveau du code signifie que je n'arrive à faire les commentaires

            Voici ce que j'ai commenté.

            import java.util.HashMap;
            import java.util.Vector;
            import javax.swing.JTable;
            import javax.swing.ListSelectionModel;
            import javax.swing.table.DefaultTableModel;
            import javax.swing.table.TableColumnModel;
             
            /**
             *
             * @author Mada96
             */
            public class JTableColumn extends JTable {   
                private DefaultTableModel tableur;
                private Object[][] rowData;
                private Object[] columnNames;
             /**
              * Constructeur par reference.   
              * @param dm model de donnees.
              */
                public JTableColumn(DefaultTableModel dm) {
                    super(dm);
                    this.tableur = dm;
                }
                /**
                 *Constructeur par reference.  
                 * @param dm model de donnees.
                 * @param cm model de la colonne.
                 */
                public JTableColumn(DefaultTableModel dm, TableColumnModel cm) {
                    super(dm, cm);
                    this.tableur = dm;
                }
                /**
                 *  Constructeur par reference.
                 * @param dm model de donnees.
                 * @param cm model de la colonne.
                 * @param sm model de selection.
                 */
                public JTableColumn(DefaultTableModel dm, TableColumnModel cm, ListSelectionModel sm) {
                    super(dm, cm, sm);
                    this.tableur = dm;
                }
                /**
                 * Constructeur  pour afficher les valeurs dans le tableau à deux dimensions.
                 * @param rowData donnees des lignes.
                 * @param columnNames identifiant de colonne dans le model.
                 */
                public JTableColumn(Object[][] rowData, Object[] columnNames) {
                    super();
                    this.rowData = rowData;
                    this.columnNames = columnNames;
                    this.tableur = new  DefaultTableModel(this.rowData, this.columnNames);
                    this.setModel(this.tableur);
                } 
                /**
                 * /* reconstruit une nouvelle table, en replacent les colonnes dans un ordre choisi,
                 *  en affectant leurs nouveaux nom et en replacent les valeurs des cellules dans la nouvelle table. 
                 *  Il supprime l'ancienne table pour la remplacer par la nouvelle. 
                 */
                private void rowColumn() {
                    columnNames = new Object[this.getColumnCount()];/*instancifie les donnees de tous les colonnes dans le model*/
                    for(int i = 0; i < this.getColumnCount(); i++)/*On parcourt le nbre de colonne dans le model*/
                    	columnNames[i] = (String)this.getColumnModel().getColumn(i).getHeaderValue();/*On donne un identifiant (nom) a chaque colonne dans le model.*/
                    rowData = new Object[this.getRowCount()][this.getColumnCount()];/*instancifie les donnees de tous les lignes dans le model.*/
                    for (int i = 0; i < this.getRowCount(); i++)/*On parcourt le nbre de ligne dans le model.*/
                        for(int j = 0; j < this.getColumnCount(); j++)/*On parcourt le nbre de colonne dans le model.*/
                            rowData[i][j] = this.getValueAt(i, j);/*retourne (accede) au valeur attribuee par la cellule par le biais du colonne j et de la ligne i dans le model.*/
                    tableur = new  DefaultTableModel(rowData, columnNames); /*instancifie le model du tableau pour  initialise les donnees des lignes et les identifiants.*/ 
                    this.setModel(tableur);/* Definir le model du tableau.*/
                }
                 /**
                  * Ajoute une colonne dans le model.
                  * @param columnName identifiant qui peut etre nul.
                  */
                public void addColumn(Object columnName){
                    this.addColumn(columnName, (Object[])null);
                }
                 /**
                  * Ajoute une nouvelle colonne.Si l identifiant est nulle, la colonne sera remplie de valeur nulle.
                  * Si l identifiant et nul, les nouvelles donnees seront ajoutees et modelisee.
                  * @param columnName identifiant du nouvelle  colonne a ajouter.
                  * @param columnData tableau facultatif de donnees de la nouvelle colonne a ajouter.
                  */
                public void addColumn(Object columnName, Object[] columnData) {
                    rowColumn(); 
                    HashMap<Integer, String> colonneJTable = new HashMap<Integer, String>();
                    for(int i = 0; i < this.getColumnCount(); i++)/*On parcourt le nbre de colonne dans le model.*/
                        colonneJTable.put(i, (String)this.getColumnModel().getColumn(i).getHeaderValue());/*Mettre l ancien nom de chaque colonne dans la carte*/
                    tableur.addColumn(columnName, columnData);/*Ajoute une nouvelle colonne avec l identifiant et le tableau facultatif de la nouvelle colonne.*/
                    for(int i = 0; i < colonneJTable.size(); i++) {
                        int columnMod = 0;/* Initialise a zero l indice de column a deplacer.*/
                        for (int j = 0; j < colonneJTable.size(); j++) {/*Parcourt la taille de la carte.*/
                            if (this.getColumnModel().getColumn(j).getHeaderValue().equals(colonneJTable.get(i)))/*Si la colonne correspond a une clé de la listEntete danss le model.*/
                            columnMod = j;/*l indice du colonne a deplacer egal a la celle de la listEntete.*/
                        }
                        this.moveColumn(columnMod, i);/*Deplace la colonne ajoutee au niveau du model.
                        (i est la nouvelle indice de la colonne colonne ajoutee et celle ci sera en dernier position).*/
                    }
                }
                /**
                 * /* Avant de pouvoir utiliser la méthode getModel() on doit ré-initialiser l'emplacement des colonnes. 
                 * Donc utiliser cette méthode si la table a été modifiée (déplacement de colonne par exemple) avant d'utiliser la méthode getModel(). */
                
                public void placeColumn() {
                    rowColumn();
                } 
                /**
                 * Ajoute une colonne dans le modèle(je ne peut bien detaille le choses). 
                 * @param columnName ...
                 * @param columnData  ...
                 */
                public void addColumn(Object columnName, Vector columnData) {
                    if (columnData != null) this.addColumn(columnName, columnData.toArray(new Object[columnData.size()]));/*...*/
                    else this.addColumn(columnName, (Object[])null);/*...*/
                }
                /**
                 *  Insert une nouvelle colonne dans le model
                 * @param column position de la colonne a inserrer
                 * @param columnName identifiant de la colonne qui peut etre nul.
                 */
                public void insertColumn(int column, Object columnName){
                    this.insertColumn(column, columnName, (Object[])null);
                }
                 /**
                  * Insert une nouvelle colonne dans le  model.
                  * Si l identifiant est nulle, la colonne inseree sera remplie de valeur nulle.
                  * Si l identifiant est different de nullr les nouvelles données seront inserees.
                  * @param column la position de la colonne a inserer.
                  * @param columnName l identifiant de la colonne a inseree.
                  * @param  le tableau facultatif .
                  */
                public void insertColumn(int column, Object columnName, Object[] columnData) {
                    addColumn(columnName, columnData);/*Ajoute une nouvelle colonne avec l identifiant et le tableau facultatif de la nouvelle colonne.*/
                    this.moveColumn(this.getColumnCount()-1, column);/*Deplace la colonne inseree au niveau du model.*/
                }
               /**
                * ( ..................)
                * @param column position de la colonne a inserer
                * @param columnName (...)
                * @param columnData (..)
                */
                public void insertColumn(int column, String columnName, Vector columnData) {
                    if (columnData != null) this.insertColumn(column, columnName, columnData.toArray(new Object[columnData.size()]));/*...*/
                    else this.insertColumn(column, columnName, (Object[])null);/*...*/
                }
                 
            }

            Je sais que c'est rempli d'erreur.Ce sont juste les connaissances et les recherches que j'ai fait.J'atends votre correction.

            Merci 

            • Partager sur Facebook
            • Partager sur Twitter
              30 septembre 2014 à 13:36:26

              Bonjour,
              Les méthodes avec vector, je ne les corrige pas (on n'utilise plus vector en java depuis très longtemps). On ne devrait même pas créer des classes avec. Là c'est juste pour aller avec la classe Jtable (on ne va pas s'attarder sur ces méthodes).
              Les commentaires, m'ont l'air bien, à part que je ne comprends pas trop « colonne dans la carte » et « le tableau facultatif ». Il n'y a pas de carte dans le code et pourquoi facultatif (mais ces des détails).
              Ensuite, pour les commentaire :
              // Commentaire sur une ligne.
              
              /*Commentaire sur plusieurs lignes.
              Commentaire ligne 2.*/
              Bonne continuation.
              • Partager sur Facebook
              • Partager sur Twitter
                1 octobre 2014 à 4:03:29

                Les méthodes avec vector je peut les supprimer dans cette classe ou je les laisse dans la classe pour en cas.

                Quand on parlait de l'édition des entétes de colonne vous avez instancifié cette objet.

                        HashMap<Integer, String> colonneJTable = new HashMap<Integer, String>();
                

                avec la fonction

                 colonneJTable.put(ancienNom,nouveauNom)

                cette constructeur permettait de distinguer l'ancien nom du nouveau.J'ai fait des recherches sur le net concernant "HashMap<Integer, String>"

                on ma dit que c'est une carte qui me permet de lister les variables.Et dans notre cas je me suis dit que ça permet de lister les nom des entétes de colonnes dans une carte(pour une carte on  dit map en Anglais ).ça explique pourquoi j'ai dit « colonne dans la carte »

                "facultatif" est  un détail de plus.

                Quand on discutait de la suppresssion des colonnes vous m'avez dit si on supprime une colonne de la tableau il faut ausssi supprimer la clé de la liste entéte correspondant.Vu que j'avais trop de  chose à vous demander j'avais pas eu le temps pour vous dire de m'éclaircir sur le mot clé.Ca fait l'occasion.

                Au niveau des  constructeur de reference je n'ai pa détaillé leur role.J'ai  juste commenté leurs  paramétres.Pouvez vous m'eclaircir un peu sur leur role.

                Merci

                • Partager sur Facebook
                • Partager sur Twitter
                  1 octobre 2014 à 13:18:04

                  Bonjour,

                  Le 19 août 2014 à 14:27:27, je vous avais donné un lien sur les collections d'objets. Les clés sont expliquées au niveau de (Les objets Map) : http://fr.openclassrooms.com/informatique/cours/apprenez-a-programmer-en-java/les-collections-d-objets.

                  Faudrait peut-être regarder les liens que je donne ;).

                  Pas connaître les constructeurs et créer les classes c'est plutôt grave, c'est la partie principale de la classe, revoir le cours : http://fr.openclassrooms.com/informatique/cours/apprenez-a-programmer-en-java/votre-premiere-classe.

                  Bonne continuation.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 octobre 2014 à 4:19:38

                    Bonsoir

                    Je lis bien les liens que vous me donnez méme si parfois je ne fait pas attention à certains choses. De maniére générale  j'ai une idée sur le clé au niveau des objets Map. Méme s'il reste des choses à voir j'ai aussi visité cette site pour avoir plus d'idées et pouvoir  faire des pratiques un peu approfondits www.jmdoudoux.fr/java/dej/chap-collections.html  

                    Au niveau de la classe ColumnNb  vous avez donné le role de chaque classe de référence comme ceci par exemple.

                    /**
                     * Constructeur par référence.
                     * Donner un nom de base aux colonnes numéroté.
                     * Ce nom sera suivi d'un numéro pour chaque colonne créer par cette classe.
                     */
                    public ColumnNb(String nameColumn){}
                    

                    <<Donner un nom de base aux colonnes numéroté.>> c'est le role de cette constructeur par référence.

                    Ainsi c'est la raison pour laquelle je vous ai demandé le role des constructeurs de référencesde  de la classe "JTableColumn" comme ceci

                     /**
                      * Constructeur par reference. 
                      *Role(...)
                      * @param dm model de donnees.
                      */
                        public JTableColumn(DefaultTableModel dm) {
                            super(dm);
                            this.tableur = dm;
                        }
                        /**
                         *Constructeur par reference.
                         *Role(...)  
                         * @param dm model de donnees.
                         * @param cm model de la colonne.
                         */
                        public JTableColumn(DefaultTableModel dm, TableColumnModel cm) {
                            super(dm, cm);
                            this.tableur = dm;
                        }
                      /**
                         *  Constructeur par reference.
                         * @param dm model de donnees.
                         * @param cm model de la colonne.
                         * @param sm model de selection.
                         *Role(...) 
                         */
                        public JTableColumn(DefaultTableModel dm, TableColumnModel cm, ListSelectionModel sm) {
                            super(dm, cm, sm);
                            this.tableur = dm;
                        }
                    

                    Vu les erreurs que je  fais et les questions que je pose , vous vous demandez sans doute si j'ai fais une formation en java.Bien sur que nom tous e que j'ai appris en java c'est grace à des personnes qui m'ont aidées à voir les bases et au recherches que j'ai mené sur le net.Méme si je me suis précipité à voir les interfaces swing et autre j'ai oublié de voir beaucoups de choses sur les bases en POO.J'ai besoin le soutien de pas mal de pesonne pour avancer.Je remercie encore "vieux96" qui m'a ouvert une compte et  aussi a vous pctronique.Cela peut expliquer les lacunes que j'ai parfois.

                    Merci

                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 octobre 2014 à 12:35:38

                      Bonjour,
                      Voici un exemple :

                      public class TestConstructeur {
                          
                          private String value;
                          
                          public TestConstructeur() {
                              value = "je suis vide";
                          }
                          
                          public TestConstructeur(String valueReference) {
                              value = valueReference;
                          }
                          
                          public String value() {
                              return value;
                          }
                          
                          public static void main(String[] args){
                              TestConstructeur object1 = new TestConstructeur();
                              TestConstructeur object2 = new TestConstructeur("Valeur par référence");
                      
                              System.out.println("Constructeur par défaut : "+object1.value());
                              System.out.println("Constructeur par référence : "+object2.value());
                          }
                          
                      }
                      Constructeur par défaut : je suis vide
                      Constructeur par référence : Valeur par référence

                      Le constructeur par référence initialise les variables avec une valeur choisie.
                      Bonne continuation.

                      -
                      Edité par pctronique 2 octobre 2014 à 12:44:03

                      • Partager sur Facebook
                      • Partager sur Twitter
                        4 octobre 2014 à 0:59:57

                        Bonsoir

                        J'ai un peu dérapé en m'infiltrant sur les discutions au niveau des calculs menées par "Vieux96".Méme s'il m'a demandé de le faire.

                        On va attendre jusqu'à  la fin  pour reunir les codes.Il me reste de petits trucs pour fermer cette discution ( Plus de 100 messages de réponse c'est un peu  rassasiant  méme si je suis un peu gourmand).C'est à dire je pose trop de questions.Il ne me reste que quelques uns.

                        Méme si j'ai reguardé cette tuto http://fr.openclassrooms.com/informatique/cours/apprenez-a-programmer-en-java/votre-premiere-classe.

                         Ca parle méme comment intégrer une méthode dans une classe.Mais j'ai des problémes d'intégrer les méthodes "addTabColumn" ; "removeTabColumn"de la classe "ColumnNB" dans la classe "Tableur6" pour  insérer et supprimer des colonnes "prix".
                        La manière d'intégrer les méthodes sont différents.
                        Merci

                        -
                        Edité par mada96 4 octobre 2014 à 1:24:47

                        • Partager sur Facebook
                        • Partager sur Twitter
                          4 octobre 2014 à 8:49:43

                          Bonjour,

                          Vous ne pouvez pas être plus claire sur le problème, sinon je vais avoir du mal à répondre.

                          mada96 a écrit:

                          La manière d'intégrer les méthodes sont différents.

                          Comment ça différente ? (je n'ai pas lu les cours du site et j'étais regardé vite fait, je ne vois pas de différence).

                          Expliquer le problème.

                          Bonne continuation.



                          • Partager sur Facebook
                          • Partager sur Twitter
                            4 octobre 2014 à 16:24:08

                            Bonjour

                            Je voulais dire simplement que je n'arrive pas a inétgrer les méthodes  "removeTabColumn"de la classe "ColumnNB" dans la classe "Tableur6" pour  insérer et supprimer des colonnes "prix". 

                            Lorsqu'on clique sur le bouton "ajouter" .

                             private void ajoutActionPerformed(ActionEvent e) {
                                    if (ajout.isEnabled()) { 
                                    	table.addTabColumn();(la façon dont je l'ai intégrer ne marche pas)
                                    	poid();
                                    }
                                }
                                 

                            Méme chose pour le bouton "supprimer".

                            • Partager sur Facebook
                            • Partager sur Twitter
                              4 octobre 2014 à 17:45:00

                              Bonjour,

                              La méthode addTabColumn se trouve dans la classe ColumnNB et non pas dans la classe JTableEditHead.

                              Il faudra faire :

                              private ColumnNb columnsPrice;
                              columnsPrice = new ColumnNb("prix ", new int[]{1, 2, 3});
                              columnsPrice.table(table);// pour définir le tableau
                              columnsPrice.addTabColumn();

                              Bonne continuation.

                              • Partager sur Facebook
                              • Partager sur Twitter
                                5 octobre 2014 à 14:32:06

                                Bonjour

                                Regarder ce que j'ai un peu  bricoloé  au niveau de la suppression de colonne . Pas d'erreur sur le code mais ça ne marche pas.

                                 /**
                                     * Si on clique sur le bouton supprimer. (ecouteur)
                                     * @param e
                                     */
                                    private void supActionPerformed(ActionEvent e) {
                                        if (table.getSelectedColumn() >= 0) {
                                            if (columnPrice(table.getSelectedColumn())) {
                                               columnsPrice.removeTabColumn(columnsPrice.intTabNb(table.getSelectedColumn()));// ça ne marche pas
                                            }
                                            table.removeColumn(table.getSelectedColumnCount());
                                            poid();
                                        }
                                    }



                                • Partager sur Facebook
                                • Partager sur Twitter
                                  5 octobre 2014 à 15:04:54

                                  Bonjour,

                                  Le mieux serait de faire :

                                      private void supActionPerformed(ActionEvent e) {
                                          if (table.getSelectedColumn() >= 0) {
                                              if (columnsPrice.isTabColumn(table.getSelectedColumn())) {
                                                  columnsPrice.removeTabColumn(table.getSelectedColumnCount());
                                              } else {
                                                  table.removeColumn(table.getSelectedColumnCount());
                                              }
                                              poid();
                                          }
                                      }

                                  Bonne continuation.

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    5 octobre 2014 à 16:55:05

                                    J'ai copié ce bout  de  code mais le bouton "supprimer" ne répond pas lors d'une clique.Il ne supprime pas les colonnes. ça marche de votre coté.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      5 octobre 2014 à 17:21:02

                                      Oui, je n'avais pas vu le : "table.getSelectedColumnCount()" de votre code. J'ai recopié en fait :lol:.

                                      Celui-ci : (et j'ai testé)

                                          private void supActionPerformed1(ActionEvent e) {
                                              if (table.getSelectedColumn() >= 0) {
                                                  if (columnsPrice.isTabColumn(table.getSelectedColumn())) {
                                                      columnsPrice.removeTabColumn(table.getSelectedColumn());
                                                  } else {
                                                      table.removeColumn(table.getSelectedColumn());
                                                  }
                                                  poid();
                                              }
                                          }

                                      Bonne continuation.

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        5 octobre 2014 à 20:59:33

                                        Je vous donne le code tous entier pour voir car de mon coté il y'a pas de changement.

                                        import java.awt.BorderLayout;
                                        import java.awt.Color;
                                        import java.awt.Dimension;
                                        import java.awt.GridLayout;
                                        import java.awt.event.ActionEvent;
                                        import java.awt.event.ActionListener;
                                        import java.util.Arrays;
                                        
                                        import javax.swing.BorderFactory;
                                        import javax.swing.DefaultCellEditor;
                                        import javax.swing.JButton;
                                        import javax.swing.JComboBox;
                                        import javax.swing.JFrame;
                                        import javax.swing.JPanel;
                                        import javax.swing.JScrollPane;
                                        import javax.swing.JTable;
                                        import javax.swing.JTextField;
                                        import javax.swing.table.TableColumn;
                                         
                                        public class Tableur6 extends JFrame {
                                             
                                            private JTableEditHead table;
                                            private JButton ajout;
                                            private JScrollPane entete;
                                            private JTextField texte; 
                                            private JButton ok;
                                            private String columnMarchandisee;
                                            private String columnPoid;
                                            private String columnPrice;
                                            private String columnUtilisation;
                                            private int[] nbPrice;
                                            private JButton sup;
                                            private JPanel pa;
                                            private ColumnNb columnsPrice; 
                                            /**
                                             * Constructeur par defaut de la classe.
                                             */
                                            public Tableur6(){
                                                this.initClass();
                                                this.setLocationRelativeTo(null);
                                                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                                                this.setTitle("JTable");
                                                this.setSize(600, 200);
                                            }
                                             
                                            /**
                                             * Initialise les variables de la classe.
                                             */
                                            private void initVariable() {
                                                nbPrice = new int[]{1, 2, 3};
                                                columnMarchandisee = "marchandisee";
                                                columnPoid = "poid en kg";
                                                columnPrice = "prix ";
                                                columnUtilisation = "utilisation";
                                                columnsPrice = new ColumnNb("prix ", new int[]{1, 2, 3});
                                            }
                                             
                                            /**
                                             * Initialise les composants de la classe.
                                             */
                                            private void initComponents() {
                                                ajout = new JButton("Ajouter une colonne");
                                                sup = new JButton("Supprime une colonne");
                                                texte= new JTextField("Prix",10);
                                                ok = new JButton(" ok "); 
                                                pa=new JPanel();
                                                pa.setPreferredSize(new Dimension (0,60));
                                                pa.setBorder(BorderFactory.createLineBorder(Color.CYAN));
                                                add(pa,BorderLayout.SOUTH);
                                                pa.setLayout(new GridLayout(2, 2));
                                                pa.add(ajout, BorderLayout.SOUTH);
                                                pa.add(sup, BorderLayout.SOUTH);
                                                pa.add(texte, BorderLayout.SOUTH);
                                                pa.add(ok, BorderLayout.SOUTH);
                                        
                                                //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[] namesColumnPrice = columnsPrice.namesNb();
                                                String[]  theTitle = {columnMarchandisee, columnPoid, namesColumnPrice[0],
                                                     namesColumnPrice[1], namesColumnPrice[2], columnUtilisation};
                                                table = new JTableEditHead(data, theTitle){
                                                    public boolean isTableColumnEditable(int colIndex) {
                                                        if (table.columnContains(columnMarchandisee))
                                                            return colIndex != table.nmColumn(columnMarchandisee);
                                                        else return true;
                                                    }
                                                     
                                                    public boolean isCellEditable(int rowIndex, int colIndex) {
                                                        return tableIsCellEditable(rowIndex, colIndex);
                                                    }
                                                };
                                                columnsPrice.table(table);
                                            }
                                             
                                            /**
                                             * Verifie que la cellule est editable.
                                             * @param rowIndex numero de la ligne.
                                             * @param colIndex numero de la colonne.
                                             * @return true si on peut editer.
                                             */
                                            private boolean tableIsCellEditable(int rowIndex, int colIndex) {
                                                /*if (!((String)table.getColumnModel().getColumn(colIndex).getHeaderValue()).contains(columnPrice)) {
                                                    ajout.setEnabled(true);
                                                } else {
                                                    ajout.setEnabled(false);
                                                    sup.setEnabled(false);
                                                }
                                                if (!table.isIntColumnName(colIndex, columnMarchandisee)) {
                                                    sup.setEnabled(true);   
                                                } else {
                                                    sup.setEnabled(false);
                                                }*/
                                                 
                                                if(nbPrice.length==1 &&
                                                        ((String)table.getColumnModel().getColumn(colIndex).getHeaderValue()).contains(columnPrice))
                                                    sup.setEnabled(false);
                                                 
                                                if (table.columnContains(columnMarchandisee))
                                                    if (colIndex == table.nmColumn(columnMarchandisee)) return false;
                                                 
                                                if (table.columnContains(columnUtilisation) )
                                                    if (colIndex == table.nmColumn(columnUtilisation)) return false;
                                                 
                                                return true;
                                            }
                                             
                                            /**
                                             * Les ecouteurs de la classe.
                                             */
                                            private void listenerClass() {
                                                ajout.addActionListener(new ActionListener() {
                                                    public void actionPerformed(ActionEvent e) {
                                                        ajoutActionPerformed(e);
                                                    }
                                                });
                                                sup.addActionListener(new ActionListener() {
                                                    public void actionPerformed(ActionEvent e) {
                                                        supActionPerformed(e);
                                                    }
                                                });
                                                ok.addActionListener(new ActionListener() {
                                                    public void actionPerformed(ActionEvent e) {
                                                        okActionPerformed(e);
                                                    }
                                                });
                                            }  
                                            
                                            /**
                                             * Si on clique sur le bouton supprimer. (ecouteur)
                                             * @param e
                                             */
                                        
                                        
                                            private void supActionPerformed(ActionEvent e) {
                                            	    if (table.getSelectedColumn() >= 0) {
                                            	        if (columnsPrice.isTabColumn(table.getSelectedColumn())) {
                                            	            columnsPrice.removeTabColumn(table.getSelectedColumn());
                                            	        } else {
                                            	            table.removeColumn(table.getSelectedColumn());
                                            	        }
                                            	        poid();
                                            	    }
                                            	}
                                            /**
                                             * Si on clique sur le bouton ok. (ecouteur)
                                             * @param e
                                             */
                                           private void okActionPerformed(ActionEvent e) {
                                            	renameColumnPrice();
                                            	table.placeColumn();
                                            	 poid();
                                            	 columnsPrice.renameTabColumnNb();
                                            }
                                           
                                            /**
                                             * Si on clique sur le bouton ajouter. (ecouteur)
                                             * @param e
                                             */
                                            private void ajoutActionPerformed(ActionEvent e) {
                                                if (ajout.isEnabled()) { 
                                                	columnsPrice.addTabColumn();
                                                	poid();
                                                }
                                            }
                                             
                                               
                                            /**
                                             * Initialise la classe.
                                             */
                                            private void initClass() {
                                                this.initVariable();
                                                this.initComponents();
                                                 
                                                poid();
                                                entete= new JScrollPane(table);
                                                table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
                                                table.setColumnSelectionAllowed(true);
                                                add(entete, BorderLayout.NORTH);
                                                 
                                                this.listenerClass();
                                            }
                                             
                                            public void poid() {
                                                JComboBox  jcbocoeff = new JComboBox();
                                                for (int i = 10; i <= 20; i++)
                                                    jcbocoeff.addItem(String.valueOf(i));
                                                TableColumn poid = table.getColumn(columnPoid);
                                                poid.setCellEditor(new DefaultCellEditor(jcbocoeff));
                                            }
                                             /**
                                              * 
                                              * @param args
                                              */
                                            public static void main(String[] args){
                                                Colonne fen = new Colonne();
                                                fen.setVisible(true);
                                             }
                                             
                                        }

                                        -
                                        Edité par mada96 5 octobre 2014 à 21:01:51

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          5 octobre 2014 à 22:46:43

                                          J'ai du mal avec votre code :

                                          private void okActionPerformed(ActionEvent e) {
                                               renameColumnPrice();
                                               table.placeColumn();
                                               poid();
                                               columnsPrice.renameTabColumnNb();
                                          }

                                          C'est quoi renameColumnPrice(); et columnsPrice.renameTabColumnNb(); ?

                                          PS : J'ai testé votre code, la suppression fonctionne. Le problème ne vient pas de là.

                                          Normalement ça devrait ressembler a :

                                              private void okActionPerformed(ActionEvent e) {
                                                 columnsPrice.renameTabColumnNb(texte.getText());
                                                 table.placeColumn();
                                                 poid();
                                              }

                                          Bonne continuation.

                                          -
                                          Edité par pctronique 6 octobre 2014 à 0:09:21

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            6 octobre 2014 à 0:10:30

                                            le probléme vient de la classe "ColumnNb" .Je l'ai résolu.renameColumnPrice(); ce n'est rien .Je l'avais mis en commentaire et par la suite j'ai enlevé les commentaires.columnsPrice.renameTabColumnNb();  c'est juste l'idée d'intégrer la méthode "renameTabColumnNb()" de la classe "ColumnNb" dans la classe "Tableur6".Pour changer le nom des prix à partir de la JTextField  comme au par avant.

                                            Merci

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              6 octobre 2014 à 2:12:31

                                              Oui ça marche.Je vais au demander quelque chose que je crois impossible à faire à moins qu'on modifie totalement les classes.Je n'ai  pas essayé de chercher car cela n'aboutira pas à rien.Voici le probléme

                                              Si vous supprimez toutes les colonnes "prix" grace au bouton "supprimer" puis vous cliquez sur le bouton "ajouter une colonne"  vous remarquez une exception apparaitre. De mon avis ça est le fait que le nombre de colonne de la table doit etre au moins égal à 1.Mais ce n'est pas le cas car on a tous supprimé.Méme si c'est un peu compliqué à  faire je  voudrai que lorsque l'utilisateur supprime toute les colonnes "prix" du tableau et  ensuite qu'il puisse ajouté une colonne "prix1" lorsqu'il clique sur "ajouter".J'avais contourné cette probléme en utilisant une condition (s'il en reste au moins une colonne prix désactive le bouton "supprimer".

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                6 octobre 2014 à 12:34:30

                                                Bonjour,

                                                Un programme bien fait, c'est de pouvoir le modifier rapidement, mais faut bien connaitre ces classes ;). Le problème vient lorsqu'on ajoute des colonnes prix, donc c'est dans la classe "ColumnNb" et c'est au moment d'ajouter une colonne quand il y en a plus dans le tableau, c'est donc dans la méthode "addTabColumn". C'est simple à faire, faut seulement modifier la méthode "addTabColumn" de la classe "ColumnNb". Cette méthode insert une colonne après la dernière colonne prix, il suffit juste de dire que s'il n'y a pas de colonne prix, il doit créer une colonne "prix 1" à la fin du tableau et non plus l'insérer et le tour et joué. C'est très simple et ça prend 5 lignes à tous cassé (pas de quoi s'arracher les cheveux :lol:).

                                                Bonne continuation.

                                                -
                                                Edité par pctronique 6 octobre 2014 à 13:00:52

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  6 octobre 2014 à 20:29:07

                                                  Bonjour

                                                  Pour résoudre cette probléme j'ai fait un petit test pour voir

                                                  S'il parcourt le tableau et voit le dernier colonne "prix" il m'affiche une <<colonne "prix" détectée>> et s'il parcourt le tableau et ne voit pas de colonne "prix" il me dit <<pas de colonne "prix">>.Tous ces évenemnts se produiront lors d'une clique sur le bouton "ajouter une colonne".

                                                  Mais le test a une faille sur ce bout de code

                                                  for (int j = 0; j < table.getColumnCount(); j++) {
                                                  
                                                          if (!table.isIntColumnName(j, nameNb + nb.length))  System.out.println("Pas de colonne prix !");          
                                                  
                                                   
                                                  
                                                      }
                                                  



                                                  je crois que le probleme vient de la négation que j'ai utilisée

                                                  Voici le code en entier

                                                    public void addTabColumn() {
                                                          int column = 0;
                                                          for (int j = 0; j < table.getColumnCount(); j++) {
                                                              if (table.isIntColumnName(j, nameNb + nb[nb.length-1])) {column = j + 1;
                                                              System.out.println("colonne prix detectee!");
                                                              }
                                                  
                                                          }
                                                          addColumn();
                                                          String name= nameNb + (nb[nb.length-1]);
                                                         table.insertColumn(column, name);
                                                          for (int j = 0; j < table.getColumnCount(); j++) {
                                                          if (!table.isIntColumnName(j, nameNb + nb.length))  System.out.println("Pas de colonne prix !");          
                                                  
                                                      }
                                                          }
                                                  



                                                  -
                                                  Edité par mada96 6 octobre 2014 à 20:33:20

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    6 octobre 2014 à 21:01:56

                                                    L'idée, c'était plutôt de faire :

                                                    if (nb.length > 0) {
                                                         System.out.println("colonne prix detectee!");
                                                         //le code avant le changement de la méthode.
                                                    } else {
                                                         System.out.println("Pas de colonne prix !");
                                                         //le nouveau code a utiliser.
                                                    }



                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      6 octobre 2014 à 23:12:15

                                                      J'ai cherché mais je ne vois rien .j'ai méme fait plus de 5 lignes .l 'exception me dérange vraiment. Je sais que l'exception est du qu'il ne trouve pas la derniere colonne prix pour insérere une autre colonne "prix".

                                                      Voici une théorie qui ne marche pas en pratique.

                                                          if (nb.length<0) 
                                                      table.insertColumn(2, nameNb+1);
                                                          }



                                                      -
                                                      Edité par mada96 6 octobre 2014 à 23:21:47

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        6 octobre 2014 à 23:15:27

                                                            public void addTabColumn() {
                                                                if (nb.length > 0) {
                                                                    int column = 0;
                                                                    for (int j = 0; j < table.getColumnCount(); j++) {
                                                                        if (table.isIntColumnName(j, nameNb + nb[nb.length-1])) column = j + 1;
                                                                    }
                                                                    addColumn();
                                                                    String name= nameNb + (nb[nb.length-1]);
                                                                    table.insertColumn(column, name);
                                                                } else {
                                                                    nb = new int[]{1};
                                                                    String name= nameNb + nb[0];
                                                                    table.addColumn(name);
                                                                }
                                                            }
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          7 octobre 2014 à 0:51:54

                                                          Je n'ai pas bien cherché car je n'ai pas pensé à creer une nouvelle colonne "prix" avec <<   nb = new int[]{1};>>.Pourtant vous me l'avais dit.

                                                          Juste j'ai apporté une petite modification .Au lieu de l'ajouter je l'ai insérer suivant la colonne séléctionnée(vous allez me rire sans doute car ce n'est méme pas une modification juste c'est pour contribuer à ce que vous avez fait).

                                                          Merci

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            7 octobre 2014 à 17:07:10

                                                            Bonjour

                                                            depuis hier j'essaye de faire les derniers réglages au niveau  des colonnes.Je me suis confronté à sur quelque chose.Je veux donner l'utilisateur la possibilité de numéroter les  prix à sa guise.S'il veut changer la numérotation  par des  chiffres romains par exemple ou utiliser les rangs comme 

                                                            1 ére prix ainssi de suite . Ce qui est dess chiffres romains je ne sais convertir le nombres francais en smbole romain.Ce qui est du rang je ne sais pas méttre l'exposant.Méme si dans les calculatrices on utilise le symbole(^) mais je l'utilisé dans le langguage courant.  J'ai cheché sur le net mais je ne trouve pas grand chose.

                                                            Voici ce qu'on devrait avoir sur notre fenetre

                                                            C'est juste l'apparence je ne veux pas surcharger le code.

                                                            (...)
                                                                String[] convertion = {"nombre arithmetique", "Romain","rang"};
                                                            (...)
                                                               add(new JComboBox(convertion));
                                                            (...)



                                                            • 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