Bonjour à tous,

J'ai suivi le tuto Multi-Span Cell :
http://www.crionics.com/products/ope...Examples4.html

Le tuto fonctionne a merveille.
Mais je n'arrive pas à l'appliquer sur ma classe qui hérite AbstractTableModel.
A voir image jointe:

Le plus simple est de vous montrer a partir de 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
package com.peofofo.model;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
 
import javax.swing.table.AbstractTableModel;
 
import com.peofofo.dao.DAO;
import com.peofofo.dao.DAOFactory;
import com.peofofo.dao.JdbcConnector;
import com.peofofo.dao.tables.ConsommationsDao;
import com.peofofo.swing.AttributiveCellTableModel;
import com.peofofo.swing.CellSpan;
import com.peofofo.swing.MultiSpanCellTable;
 
public class Tableau_model extends AbstractTableModel {
 
	private ArrayList<ArrayList<String>>  list_boissons = new ArrayList<ArrayList<String>>();// tableau multi-dimensionnel
	private ArrayList<ArrayList<Object>>  list_consommations = new ArrayList<ArrayList<Object>>();// tableau multi-dimensionnel
	private ArrayList<Boissons> boissons;
	private ArrayList<Consommations> consommations;
	private ArrayList<Consommations> consommations_total;
 
	public Tableau_model(Membres membres){
 
		DAO<Boissons> boissonsDao = DAOFactory.getBoissonsDAO();
		// On compte le nombre de boissons
        System.out.println("\tNombres de boissons : "+boissonsDao.count().getNombre());
        list_boissons.add(0, new ArrayList<String>());
        list_boissons.get(0).add(0, "Date");
        list_boissons.get(0).add(1, "");
        list_boissons.get(0).add(2, "0");
        boissons = boissonsDao.select();
        for(int i = 1; i < boissonsDao.count().getNombre()+1; i++){
        	//On fait notre recherche
        	//boissons = boissonsDao.find(i);
        	list_boissons.add(i, new ArrayList<String>());
        	list_boissons.get(i).add(0, boissons.get(i-1).getNom());
        	list_boissons.get(i).add(1, String.valueOf(boissons.get(i-1).getId()));
        	list_boissons.get(i).add(2, String.valueOf(boissons.get(i-1).getOrdre()));
        	System.out.println(i);
        }
        // On trie par ordre croissant les boissons
        Collections.sort(list_boissons,
        		new Comparator<ArrayList<String>>(){
				public int compare(ArrayList<String> o1, ArrayList<String> o2) {
					if (Integer.valueOf(o1.get(2)) > Integer.valueOf(o2.get(2)))  return 1; 
					else if(Integer.valueOf(o1.get(2)) == Integer.valueOf(o2.get(2))) return 0; 
	        		else return -1;
				} 
        });
        list_boissons.add(boissonsDao.count().getNombre()+1, new ArrayList<String>());
        list_boissons.get(boissonsDao.count().getNombre()+1).add(0, "Débit");
        list_boissons.add(boissonsDao.count().getNombre()+2, new ArrayList<String>());
        list_boissons.get(boissonsDao.count().getNombre()+2).add(0, "Solde");
 
        DAO<Consommations> consommationDao = DAOFactory.getConsommationsDAO();
        //On fait notre recherche      
        consommations_total = consommationDao.select("id_membres", String.valueOf(membres.getId()));
 
        ConsommationsDao consommationDao2 = new ConsommationsDao(JdbcConnector.getInstance());
        consommations = consommationDao2.select_groupby("id_membres", String.valueOf(membres.getId()));
 
        for(int i = 1; i < consommationDao.count("id_membres", String.valueOf(membres.getId())).getNombre()+1; i++){
        	list_consommations.add(i-1, new ArrayList<Object>());
        	list_consommations.get(i-1).add(0, consommations.get(i-1).getDate());
        	for(int z = 1; z < boissonsDao.count().getNombre()+1; z++){
        		int quantite=0, quantite2=0;
        		 for(Consommations str : consommations_total){
	        		if(Integer.valueOf(list_boissons.get(z).get(1)) == str.getId_boissons() && consommations.get(i-1).getId_consommations()==str.getId_consommations()){
	        				System.out.println(list_boissons.get(z).get(1)+" test  "+z+" test"+i+" "+str.getId_consommations()+" "+str.getId_membres()+" "+str.getQuantites());
	        				quantite2=str.getQuantites();
	        				quantite=1;
        			 }
        		 }
				if(quantite==1)
        			 list_consommations.get(i-1).add(z, String.valueOf(quantite2));
        		 else
        			 list_consommations.get(i-1).add(z, "");
             }
        	//On ajoute le débit
        	list_consommations.get(i-1).add(boissonsDao.count().getNombre()+1, consommations.get(i-1).getDebit_total());
        	//On ajoute le solde
        	list_consommations.get(i-1).add(boissonsDao.count().getNombre()+2, consommations.get(i-1).getSolde_restant());
        }
        // On ajoute les approvisionnenent des comptes
        DAO<Approvisionnement_compte_boissons> approvisionnement_compte_boissonsDao = DAOFactory.getApprovisionnement_compte_boissonsDAO();
        // On ajoute les éléments pour la fusion
        AttributiveCellTableModel ml = new AttributiveCellTableModel(14,15);  // Ajout de cette ligne pour la fusion (essai avec 14,15)
        final CellSpan cellAtt =(CellSpan)ml.getCellAttribute();  // Ajout de cette ligne pour la fusion
        final MultiSpanCellTable table = new MultiSpanCellTable( ml );  // Ajout de cette ligne pour la fusion
        //On fait notre recherche
        ArrayList<Approvisionnement_compte_boissons> approvisionnement = approvisionnement_compte_boissonsDao.select("id_membres_approvisionnement", String.valueOf(membres.getId()));
        for(int i = 1; i < approvisionnement_compte_boissonsDao.count("id_membres_approvisionnement", String.valueOf(membres.getId())).getNombre()+1; i++){
        	list_consommations.add(i-1, new ArrayList<Object>());
        	list_consommations.get(i-1).add(0, approvisionnement.get(i-1).getDate());
        	list_consommations.get(i-1).add(1, "Approvisionnement compte boissons");
        	list_consommations.get(i-1).add(2, "");
        	list_consommations.get(i-1).add(3, "");
        	list_consommations.get(i-1).add(4, "");
        	list_consommations.get(i-1).add(5, "");
        	list_consommations.get(i-1).add(6, "");
        	list_consommations.get(i-1).add(7, "");
        	list_consommations.get(i-1).add(8, "");
        	list_consommations.get(i-1).add(9, "");
        	list_consommations.get(i-1).add(10, "");
        	list_consommations.get(i-1).add(11, "");
        	list_consommations.get(i-1).add(12, "");
        	list_consommations.get(i-1).add(13, "");
        	list_consommations.get(i-1).add(14, approvisionnement.get(i-1).getMontant());
        	list_consommations.get(i-1).add(15, approvisionnement.get(i-1).getNouveau_solde());
        }
        int[] columns = {2,3,4,5,6,7,8,9,10,11,12,13};// On fusionne de la colonne 2 à 13
  	  	int[] rows    = {2,3,4}; // On fusionne la ligne 2 à 4
  	  	cellAtt.combine(rows,columns);  // Ajout de cette ligne pour la fusion
  	  	table.clearSelection();  // Ajout de cette ligne pour la fusion
	  	table.revalidate();  // Ajout de cette ligne pour la fusion
	  	table.repaint();  // Ajout de cette ligne pour la fusion
	}
 
	@Override
	public int getColumnCount() {
		// TODO Auto-generated method stub
		return list_boissons.size();
	}
 
	@Override
	public int getRowCount() {
		// TODO Auto-generated method stub
		return list_consommations.size();
	}
 
 
	public String getColumnName(int col) {
        return list_boissons.get(col).get(0);
    }
 
	@Override
	public Object getValueAt(int row, int col) {
		return list_consommations.get(row).get(col);
	}
 
}
J'ai ajouté les lignes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
AttributiveCellTableModel ml = new AttributiveCellTableModel(14,15);  // Ajout de cette ligne pour la fusion (essai avec 14,15)
        final CellSpan cellAtt =(CellSpan)ml.getCellAttribute();  // Ajout de cette ligne pour la fusion
        final MultiSpanCellTable table = new MultiSpanCellTable( ml );  // Ajout de cette ligne pour la fusion
Puis pour la fusion :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
int[] columns = {2,3,4,5,6,7,8,9,10,11,12,13};// On fusionne de la colonne 2 à 13
  	  	int[] rows    = {2,3,4}; // On fusionne la ligne 2 à 4
  	  	cellAtt.combine(rows,columns);  // Ajout de cette ligne pour la fusion
  	  	table.clearSelection();  // Ajout de cette ligne pour la fusion
	  	table.revalidate();  // Ajout de cette ligne pour la fusion
	  	table.repaint();  // Ajout de cette ligne pour la fusion
Je n'ai pas d'erreur généré avec le code ci-dessus. Mais la fusion ne s'applique pas au tableau.
Cette classe me permet de connaitre l'endroit de la fusion (AbstractTableModel )
Comment modifié la classe ?

Merci de votre aide