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 :

Saisir des données dans tableau JTable à partir du clavier


Sujet :

Composants Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Septembre 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Collégien
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2017
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Saisir des données dans tableau JTable à partir du clavier
    Salut à tous,
    je suis débutant dans la programmation et j'aimerais créer un petit programme dont l'objectif est d'afficher un tableau JTable et permettre à l'utilisateur de saisir des données et de pouvoir les enregistrer de façon à les retrouver au prochain lancement du programme.
    Mon problème reste le fait que mon tableau ne permet pas la saisie de données.
    Merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Montre-nous ton code, en particulier celui du modèle (une instance d'objet de type TableModel, AbstractTableModel ou DefaultTableModel...), et comment est créée la JTable s'il n'y a pas de modèle.

    Normalement, la saisie, à la base, est permise par défaut. Une implémentation spécifique de modèle peut bloquer la saisie (par la méthode isCellEditable(ligne,colonne), qui doit retourner true ou false selon qu'on peut saisir ou pas dans la cellule correspondant aux paramètres). Je dis à la base, parce qu'on peut avoir besoin de personnaliser les éditeurs selon ce qu'on a à saisir (le type des données entre autres).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Septembre 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Collégien
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2017
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Voici ma classe modèle
    merci pour l'aide




    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
    public class Fenetre extends JFrame {
     
     
    	 private static Fenetre fen;
     
    	 private  Modele modele = new Modele();
    	    private JTable tableau;
    public Fenetre(){
     
     
      this.setTitle("COORDINATION  ET  SUIVI  DE  TRANSPORT  DES  PRELEVEMENTS  IRAS // PROJET  RESPIRE");
      this.setSize(1200, 600);
    this.setLocationRelativeTo(null);
         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       tableau = new JTable(modele);
     
     
      JPanel boutons = new JPanel();
     
      boutons.add(new JButton(new AddAction()));
     
      boutons.add(new JButton(new RemoveAction()));
     
     
     this.getContentPane().add(new JScrollPane(tableau));
      getContentPane().add(boutons, BorderLayout.SOUTH);
     
    }   
     
    public void registerFrame(JFrame frame) {
    	this.fen= new Fenetre();
     
    }
     
     
     
     
     
     
    public static void main(String[] args){
     
     Fenetre fen = new Fenetre();
      fen.setVisible(true);
    }   
     
    private class AddAction extends AbstractAction {
        private AddAction() {
            super("Ajouter");
        }
     
        public void actionPerformed(ActionEvent e) {
     
     
    		modele.addSource(new Source(  "", " ", "", "", "","","",""));
     
        }
    } 
     
    private class RemoveAction extends AbstractAction {
        private RemoveAction() {
            super("Supprimer");
        }
     
        public void actionPerformed(ActionEvent e) {
            int[] selection = tableau.getSelectedRows();
     
            for(int i = selection.length - 1; i >= 0; i--){
            	  JOptionPane jop3 ;
            jop3 = new JOptionPane();
            jop3.showMessageDialog(null, "VOUS NE POUREZ PLUS RECUPERE CES INFORMATIONS APRES SUPPRESSION", "ATTENTION", JOptionPane.ERROR_MESSAGE);
     
                modele.removeSource(selection[i]);
            }
        }
    }
     
     
    }

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Là, tu me montres tout sauf ce qu'il faut : la classe Modele qui implémente le modèle de la table.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Septembre 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Collégien
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2017
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    tt d'abord merci pour le msg privé.
    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
     
    import java.util.ArrayList;
    import java.util.List;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.table.DefaultTableModel;
     
    public   class Modele extends AbstractTableModel {
    	private final List<Source> sites = new ArrayList<Source>();
     
        private final String[] entetes =  {"Sites pilotes", "Jour d'arrivée echantillon", "Heure d'arrivée au Labo","Jour de depart echantillon","Heure lévée SONAPOST","Jour d'arrivée Bobo","Heure d'arrivée LNR-G","Temps Mis"};
     
        public Modele() {
            super();
            sites.add(new Source("","","","","","","",""));
        }
     
        public int getRowCount() {
            return sites.size();
        }
     
        public int getColumnCount() {
            return entetes.length;
        }
     
        public String setColumnName(int columnIndex) {
            return entetes[columnIndex];
        }
     
        public Object getValueAt(int rowIndex, int columnIndex) {
            switch(columnIndex){
                case 0:
                    return sites.get(rowIndex).getSite();
                case 1:
                    return sites.get(rowIndex).getDate1();
                case 2:
                    return sites.get(rowIndex).getDate2();
                case 3:
                    return sites.get(rowIndex).isDate3();
                case 4:
                    return sites.get(rowIndex).getHeure();
                case 5:
                	return sites.get(rowIndex).getdp();
                case 6:
                	return sites.get(rowIndex).getccp();
                case 7:
                	return sites.get(rowIndex).getgo();
                default:
                    return null; //Ne devrait jamais arriver
            }
        }
     
        public void addSource(Source site) {
            sites.add(site);
     
            fireTableRowsInserted(sites.size() -1, sites.size() -1);
        }
     
        public void removeSource(int rowIndex) {
            sites.remove(rowIndex);
     
            fireTableRowsDeleted(rowIndex, rowIndex);
        }
     
    	public void editorSource(Source source) {
     
     
    	}
    }

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ta classe de modèle étend la classe AbstractTableModel, qui par défaut, rend toutes les cellules non éditables.

    Il faut donc que tu ajoutes à ta classe Modele une méthode pour rendre éditables celle que tu veux pouvoir éditer.

    Si tu veux tout rendre éditable, il suffit donc d'ajouter à ta classe Modele la méthode suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public boolean isCellEditable(int rowIndex, int columnIndex) {
            return true;
    }
    Si tu veux pourvoir rendre éditable certaines colonnes, il te suffira d'exploiter columnIndex.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public boolean isCellEditable(int rowIndex, int columnIndex) {
            switch(columnIndex) {
            case 1:
            case 3:
            case 4:
                return true; // la deuxième, quatrième et cinquième colonne sont éditables
            }
            return false; // les autres colonnes ne le sont pas
    }
    Tu peux même tester certaines lignes, par rowindex

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public boolean isCellEditable(int rowIndex, int columnIndex) {
            if ( lockedrow.contains(rowIndex) ) return false; // lockedrow est par exemple un Set<Integer> qui contient les numéros de lignes qu'on ne veut pas pouvoir modifier
            switch(columnIndex) {
            case 1:
            case 3:
            case 4:
                return true; // la deuxième, quatrième et cinquième colonne sont éditables
            }
            return false; // les autres colonnes ne le sont pas
    }
    Voire même exploiter des données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public boolean isCellEditable(int rowIndex, int columnIndex) {
            if ( isLocked(getValueAt(rowIndex, 1) ) return false; // les lignes dont la deuxième colonne correspond à un critère validé par la méthode isLocked sont non éditables 
            return true; 
    }
    En plus, l'éditeur de la JTable va utiliser la méthode setValueAt() pour redispacher les données saisies au bon endroit : il faut donc aussi redéfinir cette méthode, de façon similaire à getValueAt() mais inversée (au lieu de getter, il faudra appeler des setter).

    La signature de la méthode est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        }
    Donc, par exemple, le code de cette méthode sera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    switch(columnIndex){
                case 0:
                    sites.get(rowIndex).setSite((String)aValue);
    /*... de même pour les autres colonnes modifiables */
    si le "site" est modifiable et que sa valeur est une String.

    Aussi, ton modèle ne redéfinit pas la méthode getColumnClass(), ce qui va faire que la JTable va considérer toutes les valeurs comme étant du java.lang.Object, et sélectionner donc un éditeur standard, qui va permettre d'éditer du String, ce qui va poser un problème lors de l'appel de setValueAt().
    De la même façon, tu vas devoir implémenter donc getColumnClass, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public Class<?> getColumnClass(int columnIndex) {
    switch(columnIndex){
                case 0:
                    return String.class; // si la première colonne contient du String
    /*... idem pour les autres colonnes ...*/
    }
            return Object.class;
        }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Septembre 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Collégien
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2017
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Saisir des données dans un tableau JTable
    Bonjour Mr Drigo merci pour l'appui,
    j'ai essayé avec les les code que vous m'aviez donné hier hélas mon problème reste là
    je sais pas si je dois modifié des paramètres dans ma classe Fenètre ou dans ma classe Source;

    ma classe fenetre reste la meme que j'avais envoyé par erreur
    voici ma classe Source:
    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
     
    public class Source {
        private String date1  ;
        private String site;
        private String  date2;
        private String date3;
        private String heure;
        private String dp;
        private String ccp;
        private String go;
     
        public Source( String date1, String site, String  date2, 
        		String  date3, String heure, String dp, String ccp, String go) {
            super();
     this.date1 = date1;
     this.site = site;
     this.date2 =  date2;
     this.date3 = date3;
     this.heure = heure;
     this.dp = dp;
     this.ccp = ccp;
     this.go = go;
        }
     
        public String setDate1( ) {
            return date1;
        }
     
        public void setDate1(String date1) {
            this.date1 =  date1 ;
        }
     
        public String setSite() {
            return site;
        }
     
        public void setSite(String site) {
            this.site = site;
        }
     
        public String setDate2() {
            return  date2;
        }
     
        public void setDate2(String  date2) {
            this.date2 =  date2;
        }
     
        public String setDate3() {
            return date3;
        }
     
        public void setDate3(String date3) {
            this.date3 = date3;
        }
     
        public String setdp() {
            return dp;
        }
     
        public void setdp(String dp) {
            this.dp = dp;
        }
     
        public String setccp() {
            return ccp;
        }
     
        public void setccp(String ccp) {
            this.ccp = ccp;
        }
     
        public String setgo() {
            return go;
        }
     
        public void setgo(String go) {
            this.go = go;
        }
     
     
        public String setHeure() {
            return heure;
        }
     
        public void setHeure(String heure) {
            this.heure = heure;
        }
     
    }

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Il faut donc que tu ajoutes à ta classe Modele[...]
    La classe Modele, celle qui est définie, dans le fichier Modele.java, par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public   class Modele extends AbstractTableModel {
    
        /*...*/
    
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Septembre 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Collégien
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2017
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Saisir des donnees dans un tableau JTable Resolu
    Une fois de plus merci,
    j'ai pus resoudre mon problème.

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

Discussions similaires

  1. [AC-2007] saisir des données dans un formulaire a partir d'une liste
    Par Frère Débutant dans le forum IHM
    Réponses: 1
    Dernier message: 17/01/2011, 14h23
  2. Réponses: 10
    Dernier message: 18/06/2010, 17h02
  3. Réponses: 4
    Dernier message: 05/07/2008, 20h06
  4. Afficher des données dans un datagrid à partir d'une base de données MySQL
    Par General_Garrisson dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 13/07/2006, 15h14
  5. Réponses: 2
    Dernier message: 15/06/2005, 17h32

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