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
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 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 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
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 ; } }
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; } }
Partager