Bonjour !

Je met au point un formulaire de commande, et dans celui ci, la dernière colonne représente la multiplication du prix unitaire par la quantité. L'utilisateur entre donc titre, reference et cie, puis le prix et la quantité. Du moment qu'un choix de quantité est fait, le résultat (prix * qte) apparait dans la dernière colonne (la 5 donc) et aussi dans un JTextField de total qui se met à jour dynamiquement.

J'ai un problème avec le calcul en dernière colonne : autant j'arrive à ce que la JTextfield affichant le total fonctionne correctement, autant je n'arrive pas à faire afficher le total de ligne dynamiquement, donc je suis perdu. J'ai cherché sur le net des exemples, et ça ne m'avance pas trop. Il faut que je change de cellule, pour que ce calcul se fasse.

J'ai vu aussi qu'utiliser un float n'est pas forcement judicieux (plutôt un Bigdecimal), mais comment alors l'utiliser ?
En vous remerciant

Le modèle de données
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
package com.pl.app;
 
public class Prisecommande {
    private String EAN;
    private String diffuseur;
    private String titre;
    private float prix;
    private int qte;
    private float total;
 
    public Prisecommande(String EAN,String diffuseur,String titre,float prix,int qte,float total ) {
        super();
        this.EAN = EAN;
        this.diffuseur = diffuseur;
        this.titre = titre;
        this.prix = prix;
        this.qte = qte;
        this.total = total;
    }
 
	public String getEAN() {
        return EAN;
    }
 
    public void setEAN(String EAN) {
        this.EAN = EAN;
    }
 
    public String getdiffuseur() {
        return diffuseur;
    }
 
    public void setdiffuseur(String diffuseur) {
        this.diffuseur = diffuseur;
    }
 
    public String gettitre() {
        return titre;
    }
 
    public void settitre(String titre) {
        this.titre = titre;
    }
 
 
    public float getprix() {
        return prix;
    }
 
    public void setprix(float prix) {
        this.prix = prix;
    }
 
    public int getqte() {
    	return qte;
    }
 
    public void setqte (int qte) {
    	this.qte = qte;
    }
 
    public float gettotal() {
        total = prix * qte;
    	return total;
    }
 
    public void settotal(float total) {
        this.total = total;
    }
}
Le TableModel
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
package com.pl.app;
 
import java.util.ArrayList;
import java.util.List;
 
import javax.swing.JComboBox;
import javax.swing.table.AbstractTableModel;
 
public class PriseCommandeTableModel extends AbstractTableModel {
		private List<Prisecommande> prisecommande = new ArrayList<Prisecommande>();	
		private String[] entetes = {"EAN","Diffuseur","Titre","Prix","Qte","Total"};
 
		public PriseCommandeTableModel() {
		    super();  
		}
 
		public int getRowCount() {
		    return prisecommande.size();
		}
 
		public int getColumnCount() {
		    return entetes.length;
		}
 
		public String getColumnName(int columnIndex) {
		    return entetes[columnIndex];
		}
 
		public boolean isCellEditable(int rowIndex, int columnIndex)
		{ 
		//La Colonne Affichant le total de la ligne n'est pas editable puisqu'elle se calcule toute seule
		if(columnIndex == 5) return false;
		//Le Reste du modele est editable normalement
		return true; 
		}
 
		public Object getValueAt(int rowIndex, int columnIndex) {
		    switch(columnIndex){
		        case 0:
		            return prisecommande.get(rowIndex).getEAN();
		        case 1:
		            return prisecommande.get(rowIndex).getdiffuseur();
		        case 2:
		            return prisecommande.get(rowIndex).gettitre();
		        case 3:
		            return prisecommande.get(rowIndex).getprix(); 
		        case 4:
		            return prisecommande.get(rowIndex).getqte();
		        case 5:
		            return prisecommande.get(rowIndex).gettotal();
		        default:
		            return null; //Ne devrait jamais arriver
		    }
		}
 
		@Override
		//Methode Set pour permettre la mise à jour des données dans le modele de tableau
		public void setValueAt(Object value, int rowIndex, int columnIndex) {
		    if(value != null){
		    	Prisecommande prise = prisecommande.get(rowIndex);   	
		        switch(columnIndex){
		        	case 0:
		        		prise.setEAN((String)value);
		        		break;
		            case 1:
		            	prise.setdiffuseur((String)value);
		                break;
		            case 2:
		            	prise.settitre((String)value);
		                break;
		            case 3:
		            	float prx = 0;
		                String strstk = (String) value;
		                prx = Float.parseFloat((String)strstk);
		                prise.setprix((float)prx);
		                break;
		            case 4:
		                prise.setqte((int)value);
		                break;
		            case 5:
		                prise.settotal((float)value);
		                break;
		        }
		        fireTableCellUpdated(rowIndex,columnIndex);
		    }
		}
 
		public void addCommande(Prisecommande pri) {
			prisecommande.add(pri);
		    fireTableRowsInserted(prisecommande.size() -1, prisecommande.size() -1);
		}
 
		public void removeCommande(int rowIndex) {
			prisecommande.remove(rowIndex);
		    fireTableRowsDeleted(rowIndex, rowIndex);
		}
}
Le TableListener sur mon formulaire
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
 //Listener d'écoute du tableau pour le calcul du montant de la commande
	tableauc.getModel().addTableModelListener(new TableModelListener() {
        public void tableChanged(TableModelEvent e) {
        	//Dés que le tableau est modifié, le calcul du montant total est mis à jour
            if (e.getType() == TableModelEvent.UPDATE){
        		float total = 0;
        		String totalResult = null;
                int row = tableauc.getRowCount();
 
                for (int i = 0; i < row; i++){
                	total += Float.parseFloat(tableauc.getValueAt(i,5).toString());
                }
 
                totalResult = Float.toString(total); // String totalResult declared as instance variable
                System.out.println(totalResult);
                JMontant.setText(totalResult);
            }               
        }
      });