IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

JTable, prob getValueAt : indexOutOfBounds


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 21
    Par défaut JTable, prob getValueAt : indexOutOfBounds
    Bonjour,

    J'ai un problème avec mon JTable. J'utilise une classe toute simple de données (3 attributs et les accesseurs qui vont avec) pour remplir mon JTable. Pour stocker les données de mon tableau j'utilise une liste d'objet de ma classe de données.
    Or, dès que je lance mon application l'affichage plante. Voici le code de ma partie view :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // create the JTable
            String[] title = {"Name", "Type", "Type_ID"};
            SlowControlRow[] dataTable = { new SlowControlRow("", "", 0) };
            this.table = new JTable(new TableModelObject(title, dataTable));
            // set 3 first columns behavior
            this.table.getColumn("Name").setCellEditor(new DefaultCellEditor(new JTextField()));
            this.table.getColumn("Type").setCellEditor(new DefaultCellEditor(new JTextField()));
            this.table.getColumn("Type_ID").setCellEditor(new DefaultCellEditor(new JTextField()));
    Je vous exempt du setVisible & co.

    Ensuite, lors du chargement de mon tableau celui-ci fait appel à la méthode getValueAt (normal me direz vous ! ). Cependant, il y fait appel deux fois en incrémentant l'index de la ligne. Voici l'erreur avec un affichage de l'index de ligne et de colonne dans getValueAt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    col : 0 row : 0
    col : 0 row : 1
    Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
            at java.util.ArrayList.RangeCheck(ArrayList.java:547)
            at java.util.ArrayList.get(ArrayList.java:322)
            at bookeeping.control.table.TableModelObject.getValueAt(TableModelObject.java:79)
            at javax.swing.JTable.getValueAt(JTable.java:2686)
    [...]
    Je ne comprends pas pourquoi il essaye d'accéder à la deuxième ligne de la liste alors que dans la variable data que je passe au constructeur de mon modèle, il n'y a qu'une seule ligne.
    J'ai fais des tests de mesure de la longueur de ma liste, le résultat est toujours 1.

    En prime, voici le code de ma classe TableModelObject :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    public class TableModelObject extends AbstractTableModel {
     
        private List<SlowControlRow>  data = new ArrayList<SlowControlRow>();
        private final String[] title;
     
        /**
         * Constructs an table object model with title and data.
         * @param title
         *          The array containing all titles.
         * @param data
         *          An array of SlowControlRow.
         */
        public TableModelObject(String[] title, SlowControlRow[] data) {
            this.title = title;
            for(SlowControlRow value : data) 
                this.data.add(value);
     
        }
     
        /**
         * Returns the rows number.
         * @return
         *      The rows number.
         */
        public int getRowCount(){
            return this.data.size();
        }
     
        /**
         * Returns the columns number.
         * @return
         *      The columns number.
         */
        public int getColumnCount() {
            return this.title.length;
        }
     
        /**
         * Returns the column name corresponding to the column index.
         * @param col
         *      Column index.
         * @return
         *      Column name.
         */
        @Override
        public String getColumnName(int col){
            return this.title[col];
        }
     
        /**
         * Returns the value corresponding to the column index and the row index.
         * @param col
         *       The column index.
         * @param row
         *       The row index.
         * @return
         *       Tha value which matches.
         */
        @Override
        public Object getValueAt(int col, int row) {
            System.out.println("col : "+col+" row : "+row);
            switch(col) {
                case 0 :
                    return this.data.get(row).getName();
                case 1 :
                    return this.data.get(row).getType();
                case 2 :
                    return this.data.get(row).getType_id();
                default :
                    return null;
     
            }
        }
     
        /**
         * Inserts a row in the table.
         * @param newData
         *          The row to be inserted.
         */
        public void addRow(SlowControlRow newData) {
            this.data.add(newData);
     
            fireTableRowsInserted(this.data.size()-1, this.data.size()-1);
        }
     
        /**
         * Removes rows in the dataTable
         * @param row
         *        The row to be deleted.
         */
        public void removeRow(int row) {
            this.data.remove(row);
     
            fireTableRowsDeleted(row, row);
        }
     
    }
    getValueAt étant appelé à chaque rafraichissement du tableau, il ne devrait chercher que la ligne 0 de ma liste et pas essayer d'aller au delà non ? Vu que ma List data ne contient qu'un seul objet ( par conséquent qu'une seule ligne).
    Si quelqu'un connait la cause du problème J'ai googler mon problème mais je n'ai pas trouvé de réponses.

    Cdlt,

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Javadoc !
    Et si après la lecture tu n'as toujours pas trouvé, alors regarde l'ordre des paramètres ligne et colonne
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre averti
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 21
    Par défaut
    Merci bien !
    J'avoue que je n'ai pas vraiment porté attention à l'ordre des paramètres. Assez stupide comme erreur ...
    Je vais prendre note de ta signature ! (surtout pour le cerveau).

    Problème résolu.

    Cdlt,

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

Discussions similaires

  1. prob avec un jtable
    Par offspring dans le forum Composants
    Réponses: 8
    Dernier message: 03/12/2007, 19h57
  2. prob impression JTable
    Par gnaoui_9999 dans le forum Composants
    Réponses: 6
    Dernier message: 26/05/2007, 13h42
  3. [JTable] fonctionnement de getValueAt() et addRow
    Par Nicool dans le forum Composants
    Réponses: 2
    Dernier message: 05/06/2006, 11h24
  4. [JTreeTable/JTable] getValueAt appelée nul part
    Par Zanton dans le forum Composants
    Réponses: 9
    Dernier message: 02/06/2006, 14h16
  5. [JTable] Problème avec getValueAt
    Par flames dans le forum Composants
    Réponses: 2
    Dernier message: 24/05/2006, 22h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo