Bonjour,
je suis entrain de développer une application swing me permettant de gérer les opérations d'une caisse. Dans mon projet, je souhaite avoir le total de chaque colonne d'un Jtable à la dernière ligne de celle-ci. Pour y parvenir, je charge mes données à partir d'une base MySQL dans le Jtable puis je veut pouvoir modifier la dernière ligne du Jtable en y ajoutant le total de chaque colonne. Après que j'ai écrit mon code, les données s'affiche dans le Jtable mais le total ne s'affiche pas. Voici mon 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
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
public class CalculTotalSwing extends JFrame {
 
	private JPanel contentPane;
	private JTable table;
	private JTextField textField;
	private JDateChooser dateDebut;
	private JDateChooser dateFin;
	private DefaultTableModel model;
	private TableModelListener tableModelListener;
 
	/**
         * Launch the application.
         */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					CalculTotalSwing frame = new CalculTotalSwing();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
 
	/**
         * Create the frame.
         */
	public CalculTotalSwing() {
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 769, 577);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
 
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(107, 109, 636, 419);
		contentPane.add(scrollPane);
 
		table = new JTable();
		scrollPane.setViewportView(table);
		table.getModel().addTableModelListener(tableModelListener);
 
		JButton btnRecherche = new JButton("Recherche");
		btnRecherche.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				resultat();
				 setTableModelListener();
			}
		});
		btnRecherche.setBounds(10, 21, 89, 23);
		contentPane.add(btnRecherche);
 
		textField = new JTextField();
		textField.setBounds(122, 22, 86, 20);
		contentPane.add(textField);
		textField.setColumns(10);
 
		JLabel lblPriode = new JLabel("P\u00E9riode");
		lblPriode.setBounds(291, 25, 54, 14);
		contentPane.add(lblPriode);
 
		dateDebut = new JDateChooser();
		dateDebut.setBounds(370, 21, 102, 20);
		contentPane.add(dateDebut);
 
		dateFin = new JDateChooser();
		dateFin.setBounds(516, 21, 102, 20);
		contentPane.add(dateFin);
 
 
	}
 
 
	public void resultat(){
		MetierImpl metier=new MetierImpl();
		Date date=dateDebut.getDate();
		Date date1=dateFin.getDate();
		java.sql.Date sqlDate = new java.sql.Date(date.getTime());
		java.sql.Date sqlDate1 = new java.sql.Date(date1.getTime());
 
		model = new DefaultTableModel() {
			@Override
			public boolean isCellEditable(int row, int column) {
				return row!= getRowCount()-1;
			}
			@Override
			public Class<?> getColumnClass(int columnIndex) {
				return Integer.class;
			}
		};
		model.setColumnIdentifiers(new Object[]{"Date","Entré","Sortie"});
		Object[] rows=new Object[3];
 
		Vector v=new Vector<>();// Vecteur qui permettra d'ajouter une dernière ligne dans la table.
   	    v.add("Total");
 
   	    List<Operations> operation=metier.consulterOperations(sqlDate, sqlDate1);//Création de la liste d'operation à partir de la base de donné
   	    //Chargement de données dans le tableau
		for(Operations op:operation){
			rows[0]=op.getDATE_OP();
			rows[1]=op.getENTRE();
			rows[2]=op.getSORTIE();
 
			model.addRow(rows);
 
		}
		model.addRow(v);// ajout de la dernière ligne au model
		table.setModel(model);
 
 
	}
	private void setTableModelListener() {
        tableModelListener = new TableModelListener() {
            public void tableChanged(TableModelEvent e) {
            	int lastRow = model.getRowCount() - 1; // dernière ligne
 
            	if (e.getType() == TableModelEvent.UPDATE && e.getFirstRow() < lastRow && e.getLastRow() < lastRow && e.getColumn()==1) {
 
            		int row = lastRow;
            		int totalEntre = 0;
	            	int totalSortie = 0; // on initialise le résultat
	            	for (int i = 0; i < row; i++) {
 
	            	    if ( e.getFirstRow()>=i && i<=e.getLastRow() ) {
 
	            	    	totalEntre += (int) model.getValueAt(i, 1); // calcul total de la colonne
	            	    	totalSortie += (int) model.getValueAt(i, 2); // calcul total de la colonne
	            	     }
 
	            	}
	            	model.setValueAt(totalEntre, lastRow, 1); // après la boucle on modifie la cellule censé contenir le total
	            	model.setValueAt(totalSortie, lastRow, 2); // après la boucle on modifie la cellule censé contenir le total
            	}
 
 
                }
 
          };
 
    }
}
Merci d'avance pour tout apport.