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] récupérer valeur cellule après saisie


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Par défaut [JTable] récupérer valeur cellule après saisie
    Bonjour,
    Comment récupérer la valeur saisie par l'utilisateur ?
    Je souhaite savoir ce qu'il vient de taper pour mettre le texte en majuscules et faire d'autres choses avec.
    Merci.

  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
    Et la javadoc, alors ?
    Voici la solution
    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 confirmé
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Par défaut
    Salut,
    Merci pour l'aide mais j'ai une exception
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
    at java.util.Vector.elementAt(Vector.java:430)
    at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:632)
    at Tableau.tableChanged(Tableau.java:89)
    at javax.swing.JTable.setModel(JTable.java:3626)
    at javax.swing.JTable.<init>(JTable.java:611)
    at javax.swing.JTable.<init>(JTable.java:539)
    at Tableau.<init>(Tableau.java:14)
    at FenetrePrincipale.<init>(FenetrePrincipale.java:19)
    at MainClass$1.run(MainClass.java:23)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
    BUILD SUCCESSFUL (total time: 1 second)


    Voici le code de ma classe :
    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
     
    import java.awt.Font;
    import javax.swing.JLabel;
    import javax.swing.JTable;
    import javax.swing.event.TableModelEvent;
    import javax.swing.event.TableModelListener;
    import javax.swing.table.DefaultTableCellRenderer;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableColumn;
    import javax.swing.table.TableModel;
     
    class Tableau extends JTable implements TableModelListener {
     
        public Tableau(){
     
            getModel().addTableModelListener(this);
     
            this.setModel(new DefaultTableModel(new Object[][]{
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null}
            },
                new String [] {
                    "<html><bold><H3>HEURE", "<html><bold><H3>RECETTE",
                    "<html><bold><H3>NOMBRE", "<html><bold><H3>RELIQUATS",
                    "<html><bold><H3>TOTAL", "<html><bold><H3>NB CONT",
                    "<html><bold><H3>NB BU", "<html><bold><H3>GROUPE"                        
                }
                    ));
     
            this.setFont(new Font("SANS SERIF", Font.BOLD, 16));
     
            DefaultTableCellRenderer custom = new DefaultTableCellRenderer();
            custom.setHorizontalAlignment(JLabel.CENTER);
            for (int i=0 ; i<this.getColumnCount() ; i++) {
                this.getColumnModel().getColumn(i).setCellRenderer(custom);
            }
     
            for (int i = 0; i < 8; i++) {
     
                TableColumn col = this.getColumnModel().getColumn(i);
                col.setPreferredWidth(100);
     
                this.getColumnModel().getColumn(i).setResizable(false);
     
                this.tableHeader.setReorderingAllowed(false);
            }
     
            this.setRowSelectionAllowed(false);
            this.setRowHeight(28);
        }
     
        @Override
        public void tableChanged(TableModelEvent e) {
     
        int row = e.getFirstRow();
        int column = e.getColumn();
        TableModel model = (TableModel)e.getSource();
        String columnName = model.getColumnName(column);
        Object data = model.getValueAt(row, column);
     
        // A suivre...
        }
    }

    Même si je laisse le corps de la fonction TableChanged vide, j'ai l'exception.
    C'est un problème de débordement du tableau.
    J'avoue que je suis un peu paumé là.

  4. #4
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Salut,

    Voici un exemple.
    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
    import java.awt.Color;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.event.TableModelEvent;
    import javax.swing.event.TableModelListener;
    import javax.swing.table.TableModel;
     
    public class Tableau {
     
    	public static void main(String[] args) {
    		JFrame f = new JFrame();
    		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		Object[][] donnees = {
    				{ "Swing", "Astral", "standard", Color.red, Boolean.TRUE },
    				{ "Swing", "Mistral", "standard", Color.yellow, Boolean.FALSE },
    				{ "Gin", "Oasis", "standard", Color.blue, Boolean.FALSE },
    				{ "Gin", "boomerang", "compétition", Color.green, Boolean.TRUE },
    				{ "Advance", "Omega", "performance", Color.cyan, Boolean.TRUE }, };
    		String[] titreColonnes = { "marque", "modèle", "homologation",
    				"couleur", "vérifiée ?" };
    		JTable jTable1 = new JTable(donnees, titreColonnes);
    		jTable1.getModel().addTableModelListener(new TableModelListener() {
    			@Override
    			public void tableChanged(TableModelEvent e) {
     
    				int row = e.getFirstRow();
    				int column = e.getColumn();
    				TableModel model = (TableModel) e.getSource();
    				String columnName = model.getColumnName(column);
    				Object data = model.getValueAt(row, column);
    				System.out.println("Colone '" + columnName
    						+ "', ligne " + row + " : newValue -> \"" + data+"\"");
    			}
    		});
    		f.add(new JScrollPane(jTable1));
    		f.pack();
    		f.setVisible(true);
    	}
     
    }

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Par défaut
    Tu me postes un code mais je préfèrerais des explications plutôt car là ça ne m'aide pas beaucoup.
    Mais je te remercie tout de même.

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Par défaut
    J'ai changé le constructeur de mon Tableau pour "coller" à ton exemple :
    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
    import java.awt.Font;
    import javax.swing.JLabel;
    import javax.swing.JTable;
    import javax.swing.event.TableModelEvent;
    import javax.swing.event.TableModelListener;
    import javax.swing.table.DefaultTableCellRenderer;
    import javax.swing.table.TableColumn;
    import javax.swing.table.TableModel;
     
    class Tableau extends JTable implements TableModelListener {
     
     
        public Object[][] donnees = {
            {null, null, null, null, null, null, null, null},
            {null, null, null, null, null, null, null, null},
            {null, null, null, null, null, null, null, null},
            {null, null, null, null, null, null, null, null},
            {null, null, null, null, null, null, null, null},
            {null, null, null, null, null, null, null, null},
            {null, null, null, null, null, null, null, null},
            {null, null, null, null, null, null, null, null},
        };
        public String[] enTetes = {
            "<html><bold><H3>aa", "<html><bold><H3>bb",
            "<html><bold><H3>ccE", "<html><bold><H3>dd",
            "<html><bold><H3>ee", "<html><bold><H3>ff",
            "<html><bold><H3>gg", "<html><bold><H3>hh"                        
            };    
     
        public Tableau(Object[][] donnees, String[] enTetes){
     
            getModel().addTableModelListener(this);
     
            this.setFont(new Font("SANS SERIF", Font.BOLD, 16));
     
            DefaultTableCellRenderer custom = new DefaultTableCellRenderer();
            custom.setHorizontalAlignment(JLabel.CENTER);
            for (int i=0 ; i<this.getColumnCount() ; i++) {
                this.getColumnModel().getColumn(i).setCellRenderer(custom);
            }
     
            for (int i = 0; i < 8; i++) {
     
                TableColumn col = this.getColumnModel().getColumn(i);
                col.setPreferredWidth(100);
     
                this.getColumnModel().getColumn(i).setResizable(false);
     
                this.tableHeader.setReorderingAllowed(false);
            }     
     
     
            this.setRowSelectionAllowed(false);
            this.setRowHeight(28);
     
            this.setVisible(true);
        }
     
        @Override
        public void tableChanged(TableModelEvent e) {
        int row = e.getFirstRow();
        int column = e.getColumn();
        TableModel model = (TableModel)e.getSource();
        String columnName = model.getColumnName(column);
        Object data = model.getValueAt(row, column);
     
        // A suivre...
        }
    }

    Mais comment déclarer le tableau ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private Tableau tableau = new Tableau(ICI);

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Par défaut
    Dois-je obligatoirement créer une classe qui étend AbstractTableModel pour ensuite remplir ma Jtable avec ce modèle ou puis-je m'en passer ?
    Je précise que le tableau sera rempli "manuellement" par l'utilisateur (comme un tableau Excel).

    Ensuite je devrais à chaque saisie vérifier le format, mettre en majuscules certaines saisies ou encore réaliser un calcul avec le nombre saisi dans une colonne pour afficher le résultat dans une autre colonne.

    Mes différents tests pour récupérer une valeur ou afficher du texte dans une cellule (par appui sur un bouton par exemple) fonctionnent sans problème.

    Le soucis est vraiment sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void tableChanged(TableModelEvent e)
    Pourquoi je déborde du tableau en mettant ça ?
    Merci.

  8. #8
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Par défaut
    Du nouveau. J'ai fait ceci :
    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
    this.getModel().addTableModelListener(new TableModelListener() {
     
            @Override
            public void tableChanged(TableModelEvent e) {
     
                int row = e.getFirstRow();
                int column = e.getColumn();
                TableModel model = (TableModel)e.getSource();
                String columnName = model.getColumnName(column);
                Object data = model.getValueAt(row, column);
     
                String tt = data.toString();
                model.setValueAt(tt, row, column); // cette ligne pose problème
                    }
             });
    J'ai un dépassement de pile :
    Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Par défaut
    Edit : trompé de topic.i.

  10. #10
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Par défaut
    Par contre je voudrais un traitement différent selon la colonne :
    Si telle colonne -> mettre en majuscules.
    Si autre -> vérifier si la saisie est ok (ex: compatible avec le type "heure").
    si encore autre -> ouvrir fichier et vérifier si la saisie correspond à une référence.
    etc ...

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

Discussions similaires

  1. Récupérer valeur cellule Jtable
    Par Sun03 dans le forum Composants
    Réponses: 1
    Dernier message: 06/04/2011, 09h32
  2. Récupérer valeur cellule dans classeur
    Par ericdev67 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 17/03/2008, 00h54
  3. Comment récupérer valeur cellule d'un gridview?
    Par cortex024 dans le forum ASP.NET
    Réponses: 9
    Dernier message: 23/03/2007, 14h31
  4. [VBA-E]Récupérer valeur cellule
    Par wanou44 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 06/02/2006, 12h52
  5. [POI]Récupérer valeur cellule suivant format
    Par leminipouce dans le forum Documents
    Réponses: 1
    Dernier message: 27/10/2005, 08h52

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