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: Empecher l'edition des cellules et la sélection de plusieurs lignes;


Sujet :

Composants Java

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 310
    Points : 133
    Points
    133
    Par défaut JTable: Empecher l'edition des cellules et la sélection de plusieurs lignes;
    Bonjour à la communauté,
    Depuis hier je suis bloqué dans l'avancement de mon code.
    J'ai deux soucis.
    J'utilise une JTable pour afficher le résultat d'une requête(à ce niveau pas de problème).
    J'ai constaté que lorsque j'exécute le programme,les cellules sont éditables et j'arrive à sélectionner plusieurs lignes et colonne.
    Mon objectif est d'arriver à empêcher cela.
    Mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
     
    import java.sql.ResultSet;
     
    import java.sql.Statement;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableModel;
    import hrm.Connection.*;
     
    /**
     *
     * @author USER
     */
    public  class FrameListeUser extends javax.swing.JFrame {
        TableModel ft;
        /** Creates new form FrameListeUser */
        public FrameListeUser() {
            initComponents();
            getUsers();
     
        }
     
     
    	//la méthode  getUsers me permet d'afficher le resultat dans la table
        public void getUsers() {
            Statement STMT;
            try {
                STMT = Global.MyConnection.createStatement();
                ResultSet rs = STMT.executeQuery("select  numeroutilisateur, nom, prenom, telephone, adresse "
                        + "FROM tsutilisateurs;");
     
                int j = 1;
                while (rs.next()) {
                    j++;
                }
                Object vals[][] = new Object[j][5];
                rs = STMT.executeQuery("select  numeroutilisateur, nom, prenom, telephone, adresse "
                        + "FROM tsutilisateurs;");
     
                int i = 0;
                while (rs.next()) {
                    vals[i][0] = rs.getString(1);
                    vals[i][1] = rs.getString(2);
                    vals[i][2] = rs.getString(3);
                    vals[i][3] = rs.getString(4);
                    vals[i][4] = rs.getString(5);
                    i++;
                }
     
                String[] head = new String[]{"Nom", "Prenom", "Date de Naissance", "Années Expérience", "Certification"};          
                ft = new DefaultTableModel(vals, head);            
                JTableUser.setModel(ft);
     
            } catch (Exception ex) {
                //Logger.getLogger(Consultation.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        @SuppressWarnings("unchecked")
        // cette méthode est créée  par l'IDE(Netbeans 6.9.1)
        private void initComponents() {
    		.....		
            pack();
        }// </editor-fold>   
     
     
        // Variables declaration - do not modify
        private javax.swing.JButton BActualiser;
        private javax.swing.JButton BDel;
        private javax.swing.JButton BFermer;
        private javax.swing.JButton BNew;
        private javax.swing.JTable JTableUser;
        private javax.swing.JTextField TextSearch;
        private javax.swing.JButton jButton2;
        private javax.swing.JPanel jPanel1;
        private javax.swing.JPanel jPanel2;
        private javax.swing.JPanel jPanel3;
        private javax.swing.JScrollPane jScrollPane1;
        // End of variables declaration
     
    }
    Pour empêcher l'édition des cellules j'ai trouvé ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class GelerColonne extends DefaultTableModel {
     
        public boolean isCellEditable(int row, int column) {
           return false;
        }
    }
    mais quand je fait
    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
     
     
     
    public void getUsers() {
            Statement STMT;
            try {
                ...
     
                String[] head = new String[]{"Nom", "Prenom", "Date de Naissance", "Années Expérience", "Certification"}; 
    			DefaultTableModel dtm=new GelerColonne();
                ft = new DefaultTableModel(vals, head);            
                JTableUser.setModel(ft);
                JTableUser.setModel(dtm); //le tableau est vide mais les cellules ne sont pas editable
            } catch (Exception ex) {
                //Logger.getLogger(Consultation.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    le tableau est vide mais les cellules ne sont pas éditables

    Quelqu'un à une solution?

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2011
    Messages : 214
    Points : 338
    Points
    338
    Par défaut
    Bonjour,

    C'est normal, lorsque tu fais un "setModel" tu changes le modèle donc tu remplaces ton modèle "ft" qui contient les données par ton modèle "dtm" qui est complètement vide.

    Je te conseille de renommer ta classe "GelerColonne" par quelque chose comme "UneditableTableModel" et de lui rajouter un constructeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public UneditableTableModel(Object[][] data, Object[] columnNames) {
        super(data, columnNames);
    }
    Du coup tu pourras appeler ce constructeur en lui passant tes données pour avoir à la fois des colonnes non éditables et un tableau rempli.

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 310
    Points : 133
    Points
    133
    Par défaut
    Citation Envoyé par -gma- Voir le message
    Bonjour,

    C'est normal, lorsque tu fais un "setModel" tu changes le modèle donc tu remplaces ton modèle "ft" qui contient les données par ton modèle "dtm" qui est complètement vide.

    Je te conseille de renommer ta classe "GelerColonne" par quelque chose comme "UneditableTableModel" et de lui rajouter un constructeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public UneditableTableModel(Object[][] data, Object[] columnNames) {
        super(data, columnNames);
    }
    Du coup tu pourras appeler ce constructeur en lui passant tes données pour avoir à la fois des colonnes non éditables et un tableau rempli.
    Pour l'édition c'est ok.
    j'ai remplacé ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ft = new DefaultTableModel(vals, head);
                JTableUser.setModel(ft);
    par ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                DefaultTableModel ft=new UneditableTableModel(vals,head);
                JTableUser.setModel(ft);
    et ça marche

Discussions similaires

  1. [XL-2010] Obtenir la valeur de l'une des cellules d'une sélection de cellule
    Par DeerData dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/04/2014, 11h21
  2. Edition des cellules d'une JTable en un clic
    Par sebac dans le forum Composants
    Réponses: 2
    Dernier message: 17/08/2011, 15h48
  3. JTable : Caster le contenu des cellules
    Par the watcher dans le forum Composants
    Réponses: 7
    Dernier message: 13/10/2010, 18h39
  4. Réponses: 1
    Dernier message: 02/12/2004, 11h51
  5. [JTable]Aligner le contenu des cellules
    Par )3lade dans le forum Composants
    Réponses: 2
    Dernier message: 09/03/2004, 13h24

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