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 :

Jtable Appliquer une fusion de cellule avec AbstractTableModel


Sujet :

Composants Java

  1. #1
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut Jtable Appliquer une fusion de cellule avec AbstractTableModel
    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

  2. #2
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Bonjour,

    Je n'arrive toujours a appliqué mon modèle avec le tuto.
    Si quelqu'un a une piste?

    PS: J'ai trouvé une librairie : http://www.scientific.gr/
    Donc ce que je souhaite faire est possible, mais le prix de la licence est trop élevé.
    Je cherche juste a fusionner 4 -5 lignes.
    Je n'ai pas trouvé de librairie Open source. C'est bien dommage.

  3. #3
    Membre confirmé Avatar de javaNavCha
    Homme Profil pro
    EKG Group
    Inscrit en
    Juillet 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : EKG Group
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 311
    Points : 631
    Points
    631
    Par défaut
    Salut
    tu pourras créer un DefaultTableCellRenderer puis désactiver les bordure...

Discussions similaires

  1. Trouver une fusion de cellules à une ligne donnée (avec POI)
    Par Tiger971 dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 31/05/2012, 15h27
  2. [VBA-Excel] Validation d'une fusion de cellule
    Par marsupoilu dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/07/2006, 14h26
  3. Pb de lecture données dans une plage de cellule avec itération
    Par rond24 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/07/2006, 13h33
  4. [VBA-E] Copier une plage de cellules avec critère
    Par jfamiens dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 13/06/2006, 16h34
  5. appliquer une formule à +sieurs cellules excel
    Par ramsesthebest dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 27/09/2005, 20h36

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