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] Vider avec bouton dans classe extérieure


Sujet :

Composants Java

  1. #1
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Points : 75
    Points
    75
    Par défaut [JTable] Vider avec bouton dans classe extérieure
    Bonjour,
    Mon ihm possède une JTable avec un modèle étendu de AbstractTableModel et un bouton permettant de la vider.
    Tout allait très bien lorsque j'avais créé la table par défaut directement étendue de JTable avec le modèle par défaut.
    Suis-je clair ?
    Bref j'arrivais à vider ma table grâce à ce 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
    public class BoutonVider extends JButton implements ActionListener {
     
        private JTable tableau;
     
        public BoutonVider(JTable tableau) {
     
            this.tableau = tableau;
            this.addActionListener(this);
     
            this.setFont(new Font("SANS SERIF", Font.BOLD, 14));
            this.setText("Vider");
            this.setBounds(45, 565, 120, 30);       
        }
     
        @Override
        public void actionPerformed(ActionEvent e) {
     
            for(int i = 0; i < tableau.getRowCount(); i++){
     
                for(int j = 0; j < tableau.getColumnCount(); j++){
     
                    tableau.setValueAt(null, i, j);
                }
            }
        }
    }


    Maintenant que j'ai ajouté un modèle étendu de AbstactTableModele cela ne marche plus.
    J'ai donc tenté 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    import javax.swing.JTable;
     
    public class BoutonVider extends JButton implements ActionListener {
     
        private MonModele monModele;
     
        public BoutonVider(JTable tableau) {
     
            this.monModele = monModele;
            this.addActionListener(this);
     
            this.setFont(new Font("SANS SERIF", Font.BOLD, 14));
            this.setText("Vider");
            this.setBounds(45, 565, 120, 30);       
        }
     
        @Override
        public void actionPerformed(ActionEvent e) {
     
            for(int i = 0; i < monModele.getRowCount(); i++){
     
                for(int j = 0; j < monModele.getColumnCount(); j++){
     
                    monModele.setValueAt(null, i, j);
                }
            }
        }
    }
    Mais en vain.
    Où est le problème ?
    Merci de m'aider.

  2. #2
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Peut-tu poster ton code en entier que l'on puisse regarder en détail et tester sans écrire de code ?

  3. #3
    Membre régulier
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Points : 88
    Points
    88
    Par défaut
    Bonjour

    je pense qu'il y a un peoblème danse ces lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     private MonModele monModele;
        
        public BoutonVider(JTable tableau) {
            
            this.monModele = monModele;
    je sais pas si monModele est défini car le paramètre de constructeur n'est

    pas modifié JTable ,doit étre monModele

  4. #4
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Points : 75
    Points
    75
    Par défaut
    Voici BoutonVider modifié :
    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
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
     
    public class BoutonVider extends JButton implements ActionListener {
     
        private MonModele monModele;
     
        public BoutonVider(MonModele monModele) {
     
            this.monModele = monModele;
            this.addActionListener(this);
     
            this.setFont(new Font("SANS SERIF", Font.BOLD, 14));
            this.setText("Vider");
            this.setBounds(45, 565, 120, 30);       
        }
     
        @Override
        public void actionPerformed(ActionEvent e) {
     
            for(int i = 0; i < monModele.getRowCount(); i++){
     
                for(int j = 0; j < monModele.getColumnCount(); j++){
     
                    monModele.setValueAt(null, i, j);
                }
            }
        }
    }

    Sa déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private BoutonVider boutonVider = new BoutonVider(monModele);

    Je mets aussi la classe MonModele au cas où :
    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
    import javax.swing.table.AbstractTableModel;
     
    public class MonModele extends AbstractTableModel{
     
        private Object[][] donnees;    
        private String[] nomCol;
        private MonModele monModele;
     
        public MonModele (Object[][] donnees, String[] nomCol){
            this.donnees = donnees;
            this.nomCol = nomCol;
        }
     
        @Override
        public int getColumnCount(){
            return nomCol.length;
        }
     
        @Override
        public int getRowCount() {
            return donnees.length;
        }
     
        @Override
        public String getColumnName(int col) {
            return nomCol[col];
        }
     
        @Override
        public boolean isCellEditable(int ligne, int col) {          
            if(col==4 || col==7){
               return false;
            }
            else{
               return true;
            }                    
        }
     
        @Override
        public Class getColumnClass(int col){
            switch (col){
                case 1:
                    return String.class;
     
                default :
                    return Integer.class;
            }                    
        }
     
        @Override
        public Object getValueAt(int ligne, int col) {         
            return donnees[ligne][col];
        }
     
        @Override
        public void setValueAt(Object value, int row, int col) {
     
            donnees[row][col] = value;
     
            if (! value.equals("")){
     
                if ((col == 2) || (col == 3) || (col == 5) || (col == 6)){
                    value = Integer.parseInt((String) value);                
                }
     
                else if (col == 4){
                    value = value.toString().toUpperCase();
                    fireTableCellUpdated(row, col);
                }
            }      
        }  
    }

  5. #5
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Salut,

    Pour vider ta JTable, il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table.setModel(new MonModele(null, nomCol));
    Tu devra probablement modifié la méthode getRowCount() pour ne pas avoir un NullPointerException :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @Override
    	public int getRowCount() {
    		if (donnees == null)
    			return 0;
    		return donnees.length;
    	}

  6. #6
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Points : 75
    Points
    75
    Par défaut
    J'ai fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @Override
        public void actionPerformed(ActionEvent e) {
     
            tableau.setModel(new MonModele(null, nomCol));
        }

    Le problème est que ma table s'efface complètement, les cellules avec.
    Exception NullPointerException sur les 2 méthodes de MonModele :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @Override
        public int getColumnCount(){
            return nomCol.length; // je peux remplacer par 8 pour corriger le problème
        }
    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @Override
        public String getColumnName(int col) {
            return nomCol[col];
        }

  7. #7
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Points : 75
    Points
    75
    Par défaut
    Oups !!!!

    Trouvé !


    Dans ma classe BoutonVider j'ai rajouté le constructeur et les paramètres :
    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
    public class BoutonVider extends JButton implements ActionListener {
     
        private Tableau tableau;
     
        private String[] nomCol = {
            "<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"                        
        };
        private 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},
            {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},
        };
     
        private MonModele monModele = new MonModele(donnees, nomCol);
     
        public BoutonVider(Tableau tableau) {
     
            this.tableau = tableau;
            this.addActionListener(this);
     
            this.setFont(new Font("SANS SERIF", Font.BOLD, 14));
            this.setText("Vider");
            this.setBounds(45, 565, 120, 30);       
        }
     
        @Override
        public void actionPerformed(ActionEvent e) {
     
            tableau.setModel(monModele);
        }
    }
    Je ne pense pas que ça soit propre mais ça fonctionne.

  8. #8
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Je ne pense pas que ça soit propre
    En quoi n'est-ce psa propre

  9. #9
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Points : 75
    Points
    75
    Par défaut
    Simple supposition de ma part... erronée apparemment.
    Merci pour ton aide.

    Par contre ça ne fonctionne que la première fois.
    Les autres clics sur le bouton ne vident pas le tableau.

Discussions similaires

  1. [Dojo] Colonne avec boutons dans un datagrid
    Par ghost55 dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 30/04/2009, 15h29
  2. Listbox avec bouton dans item : recuperer selectedvalue ?
    Par zax-tfh dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 10/03/2009, 13h26
  3. Problème avec boutons dans une boucle
    Par CHAP26 dans le forum Flash
    Réponses: 2
    Dernier message: 03/06/2008, 14h28
  4. Nouvelle form avec bouton dans barre taches
    Par DarkChamallo dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 17/05/2004, 20h44

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