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 :

[probleme] setter tout mon AbstractTableModel par un tableau


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 1
    Par défaut [probleme] setter tout mon AbstractTableModel par un tableau
    bonjours,

    d'abord Je remercie les gens qui ont realise ce tuto:
    http://baptiste-wicht.developpez.com.../swing/jtable/
    il es tres bien foutue

    j'utilise un Jtable et un modele heritant de AbstractTableModel.
    Dans mon projet, j'utilise un une vue et un controleur
    je souhaiterai annuler des modifications apres avoir edite mes cellule donc revenir en arriere.
    il suffit de creer une variable qui sauvegarde lavaleur du Jtable et ecraser la valeur courante pour revenir en arriere.

    mais j'ai quelque petit probleme: la valeur de mon tableau n'est pas modifier.
    Voici ma classe herite de AbstractTableModel

    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.text.*;
    import java.util.*;
    import javax.swing.table.AbstractTableModel;
     
    public class TabMdl extends AbstractTableModel{
        private String data[][];
        private String title[];
     
        public TabMdl(String donnees[][], String titres[]){
            this.data = donnees;
            this.title = titres;
        }
     
        public int getRowCount() {
            return data.length;
        }
     
        public int getColumnCount() {
            return data[0].length;
        }
     
        public Object getValueAt(int rowIndex, int columnIndex) {
            return data[rowIndex][columnIndex];
        }
     
        public String[] getTitle() {
            return title;
        }
     
        public String[][] getData() {
            return data;
        }
     
        public void setData(String[][] data) {
            this.data = data;
            fireTableDataChanged();
        }
     
        public boolean isCellEditable(int row, int col){
            // seules les colonnes correspondant a prix achat, prix vente, qte_dispo, qte_vendu sont editables
            if ( (col == 2) || (col ==3) || (col ==4) || (col ==5) ) {
                return true; 
            } else {
                return false;   
            }
     
        }
        public String getColumnName(int col) {
           return this.title[col];
        }
     
        public void setValueAt(Object value, int row, int col) {
            data[row][col] = (String) value;
     
            // a chaque modification on change la valeur de la date de la derniere commande
            Locale locale = Locale.getDefault();
    	Date actuelle = new Date();	
    //	* Donne la date au format "aaaa-mm-jj"
    	DateFormat dateFormat = new SimpleDateFormat("dd/MM/yy");
            String dat = dateFormat.format(actuelle);
     
            System.out.println(dat);
            //change la valeur de la date de la derniere comande
            data[row][6] = (String) dat;
            fireTableCellUpdated(row, col);
        }
    }
    Voici mon contrôleur (gérant les action (bouton, ...)
    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
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
     
     
    package Controller;
    import DAO.DAOArticle;
    import Entity.Article;
    import View.*;
    import java.awt.event.*;
     
    public class CStock implements ActionListener{
     
        private FStock fstock;
        private String[][] tabObject;
        private String[] listeNom;
        private DAOArticle daoarticle;
     
        private String[][] previous_data;
     
        private TabMdl tablemodel;
     
        public CStock(){
            daoarticle = new DAOArticle();
     
            Article[] listeArticle = daoarticle.getAll();
            findlistenom();
            tabObject = convertToObject(listeArticle);
            //svg vers une tableau pour faire un backup(annulation)
            previous_data = tabObject;
     
            tablemodel = new TabMdl (tabObject,listeNom);
     
            System.out.println("Fin d'init CStock");
        }
     
        public String[] getListeNom() {
            return listeNom;
        }
     
        public String[][] getTabObject() {
            return tabObject;
        }
     
        private String[][] convertToObject(Article[] listeArticle){
            int nbArticle = listeArticle.length;
            System.out.println("Nb_article = " + nbArticle);
            String[][] tableauObject = new String[nbArticle][Article.nbAttribut];
            for(int i = 0; i< nbArticle; i++){
                tableauObject[i][0]=listeArticle[i].getNom_article();
                System.out.println("Nom_article = "+tableauObject[i][0]);
                tableauObject[i][1]=listeArticle[i].getNom_fournisseur();
                tableauObject[i][2]=String.valueOf(listeArticle[i].getPrix_achat());
                tableauObject[i][3]=String.valueOf(listeArticle[i].getPrix_vente());
                tableauObject[i][4]=String.valueOf(listeArticle[i].getQte_disp());
                tableauObject[i][5]=String.valueOf(listeArticle[i].getQte_vendu());
                tableauObject[i][6]=listeArticle[i].getDerniere_command();
            }
            System.out.println("Fin de conversion");
            return tableauObject;
        }
     
        /** recuperation des titres de la tables
         * ces titres correspondront au titre du JTable 
         */
        private void findlistenom(){
            System.out.println("Début de findlistnom");
            String[] listeNomTmp = daoarticle.getNomCol();
            System.out.println("ligne suivante");
     
            listeNom = new String[(listeNomTmp.length)-1];
     
            listeNom[0]= listeNomTmp[2];
            listeNom[1]= listeNomTmp[1];
            listeNom[2]= listeNomTmp[3];
            listeNom[3]= listeNomTmp[4];
            listeNom[4]= listeNomTmp[5];
            listeNom[5]= listeNomTmp[6];
            listeNom[6]= listeNomTmp[7];        
        }
     
        public void actionPerformed(ActionEvent e) {
            // bouton pour retourner en arriere
            if(e.getSource() == fstock.getbRetour()){
                fstock.setVisible(false);
                CMenu cmenu = new CMenu();
                FMenu fmenu = new FMenu(cmenu);
                cmenu.setView(fmenu);
                fmenu.setVisible(true);
            // bouton pour mettre a jour la basede donnee
            } else if (e.getSource() == fstock.getbMAJ()){
     
     
            // annulation on remplace tabobject par previous_data
            } else if (e.getSource() == fstock.getbAnnulation()){
                tabObject = previous_data;
                tablemodel.setData(previous_data);
                tablemodel.fireTableDataChanged();
     
            }
     
        }
     
        public TabMdl getTablemodel() {
            return tablemodel;
        }
     
        public void setTablemodel(TabMdl tablemodel) {
            this.tablemodel = tablemodel;
        }
     
        public void setView(FStock fstock){
            this.fstock = fstock ;
        }
     
    }
    voici ma fenetre creant mon jtable

    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
     
     
    import javax.swing.*;
    import java.awt.*;
    import Controller.CStock;
     
     
    public class FStock extends Frame{
        private CStock cStock;
     
        private JTable tableau;
     
        private JLabel titre = new JLabel("STOCK");
        private Font font1 = new Font("Arial",Font.BOLD,24);
     
        private JPanel north   = new JPanel();
        private JPanel center  = new JPanel();
        private JPanel south    = new JPanel();
     
        private JButton bRetour = new JButton("Retour");
        private JButton bMAJ = new JButton("MAJ la BDD");
        private JButton bAnnulation = new JButton("tout annuler");
     
        public FStock(CStock cstock, TabMdl tableModel) {
            super("STOCK");
     
            System.out.println("alncement de FStock");
            this.cStock = cstock;
            tableau = new JTable(tableModel);
            String[] title = tableModel.getTitle();
            initComponents();
        }
     
        private void initComponents() {
     
            //On définit le layout à utiliser sur le contentPane
            this.setLayout(new BorderLayout());
            //On ajoute le  au contentPane de la JFrame
            //Au centre
            this.getContentPane().add(center, BorderLayout.CENTER);
            //Au nord
            this.getContentPane().add(north, BorderLayout.NORTH);
            //Au sud
            this.getContentPane().add(south, BorderLayout.SOUTH);
     
            titre.setFont(font1);
     
            north.setLayout(new FlowLayout());
            north.add(titre);
     
     
            //center.add(tableau.getTableHeader(),BorderLayout.NORTH);
            center.add(new JScrollPane(tableau),BorderLayout.CENTER);
     
            bRetour.addActionListener(cStock);
            south.setLayout(new FlowLayout(FlowLayout.RIGHT));
            south.add(bAnnulation);
            south.add(bMAJ);
            south.add(bRetour);        
     
        }
     
        public JButton getbMAJ() {
            return bMAJ;
        }
     
        public JButton getbRetour() {
            return bRetour;
        }
     
        public JButton getbAnnulation() {
            return bAnnulation;
        }
    }

  2. #2
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Normal CStock.tabObject et CStock.previous_data partagent la même référence.

    Tu peux également essayer de t'appuyer sur la classe UndoManager
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

Discussions similaires

  1. [XL-2007] Diviser toutes les cellules d'un tableau par un nombre
    Par Medde dans le forum Excel
    Réponses: 2
    Dernier message: 10/04/2010, 14h25
  2. Réponses: 0
    Dernier message: 11/02/2009, 13h53
  3. [CS3] Afficher tout mon site dans IE par exemple?
    Par Marcc dans le forum Dreamweaver
    Réponses: 6
    Dernier message: 28/01/2009, 14h12
  4. Réponses: 2
    Dernier message: 22/04/2004, 13h28
  5. [VB.NET] Proteger mon site par mot de passe
    Par stephane93fr dans le forum ASP.NET
    Réponses: 8
    Dernier message: 19/01/2004, 08h53

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