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][JLabel] Remplir une Case de mon tableau avec un JLabel de couleur


Sujet :

Composants Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 80
    Points : 71
    Points
    71
    Par défaut [JTable][JLabel] Remplir une Case de mon tableau avec un JLabel de couleur
    Salut tout le monde,

    Voici mon probleme :

    J'ai un JTable que je remplis avec un tableau d'objets mais je voudrais que certaines de ces cases affichent le contenu en gras et en rouge. donc j'ai pensé mettre dans la case de mon tableau un JLabel contenant mon texte.
    Mais ca ne marche pas. Je vous mets 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
     
    try{
            for(int i=0;i<listCom.size(); i++)
            {
     
     
                    for(int j=0;j<7;j++)
                    {
                        tab[x][j]=((Object[])(listCom.get(i)))[j];
     
                    }
                    tab[x][6]="";
                             tab[x][7]=""+(Double.parseDouble((String)((Object[])(listCom.get(i)))[3]))*(Double.parseDouble((String)((Object[])(listCom.get(i)))[4]));
                    total=total+Double.parseDouble((String)tab[x][7]);
                    if(i<listCom.size()-1)
                    {
                            if(!((Object[])(listCom.get(i)))[0].equals(((Object[])(listCom.get(i+1)))[0]))
                        {
                            x++;
                            tab[x][6]=((Object[])(listCom.get(i)))[6];
                            double tot=total-Double.parseDouble((String)tab[x][6]);
                            JLabel lab = new JLabel();
                            lab.setText(f.format(tot));
                            lab.setForeground(Color.RED);
                            lab.setFont( new Font("Tahoma", Font.BOLD, 14));
                            tab[x][7]=lab;
                            total=0;
                        }
                        x++;
                    }
            }
            }catch(Exception e)
            {            
                System.out.println("error : "+e);
            }
     
            String [] title={"NumCommande", "Produits","Conditionnement","Nombre","Prix","TVA","Remise","Total"};
            jTable1 = new JTable(tab, title);
            this.centrerTable(jTable1); 
            jTable1.setSize(800,600);
            JScrollPane scroll = new JScrollPane(jTable1);
            jPanel1.add(scroll);
    Merci de votre aide

  2. #2
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Bonjour,

    Renseigne toi sur les TableCellRenderers. Il y a le contenu de la JTable (dans le model) et la manière de l'afficher (avec un TableCellRenderer).

    Mettre un JLabel en contenu ne t'empêche pas de le représenter avec n'importe quel autre composant.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 80
    Points : 71
    Points
    71
    Par défaut
    Ok merci je vais chercher la dedans.

    Mais est ce que je vais pouvoir appliquer ce CellRenderer à quelques cellules en particulier?

    Et est que quelqu'un n'aurait pas des exemples pour ce TablCellRenderer???

    Merci

  4. #4
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Le principe de la séparation données/affichage, c'est que la cellule devrait contenir toutes les infos nécessaires à son affichage. C'est à dire le texte, et si il faut le mettre en forme.

    Mais pour des tables simples, c'est un peu lourd (il faut définir un TableModel et un TableCellRenderer).

    Ce que tu peux faire, c'est ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class MonCellRenderer extends DefaultTableCellRenderer {
     
      public Component getTableCellRendererComponent (JTable table, Object value, boolean isSelected,
            boolean hasFocus, int row, int column) {
     
        Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
     
        if(...) {
          c.setFont(c.getFont().deriveFont(Font.BOLD));
          c.setForeground(Color.RED);
        }
        return c;
      } 
    }
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  5. #5
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Excuse moi, j'ai du partir, et j'ai posté en vitesse. Si tu fais le test dans le renderer comme je t'ai montré, il faut appliquer ce renderer à toute la JTable, en appelant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maJTable.setDefaultRenderer(new MonCellRenderer());
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 80
    Points : 71
    Points
    71
    Par défaut
    Je te remercie pour ton aide mais il y un petit probleme sur le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    maJTable.setDefaultRenderer(new MonCellRenderer());
    c'est soit : soit :
    Je pencherais plus pour le premier, mais je ne sais pas quoi mettre en premier argument.

    Merci

  7. #7
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Ah, oui ! Je me fais toujours avoir avec cette méthode .

    Si les cases rouges figurent toujours dans une colonne, passe par TableColumn, sinon, tu peux essayer de passer Object.class, Number.class ou Boolean.class pour le 1er paramètre.


    EDIT :
    Sinon, si la table contient toujours le même type de données (par exemple des Double), passe le type de ces données (Double.class)
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 80
    Points : 71
    Points
    71
    Par défaut
    Ca ne marhe pas en passant par Object.Class ou Number.Class ou Boolean.class, et pour etre sur que ca venait pas de ma condition je l ai enlevée....

    Et je ne vois pas ce que je peux faire avec un TableColumn....

  9. #9
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Bon, je me souviens avoir toujours galéré avec cette histoire de columnClass.

    Il y a la méthode TableColumn.setCellRenderer(monRenderer) que à priori tu peux appeler sur toutes les colonnes avec le même objet. Au moins il n'y a pas cette histoire de classe. Mais je ne vois pas comment récupérer des TableColumn non plus.

    Sinon, j'ai reregardé ton code, et tu mets des String dans les cases, donc avec String.class, ça devrait marcher. Du moins d'après la javadoc et le tutoriel de sun.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 80
    Points : 71
    Points
    71
    Par défaut
    bon ca ne marche pas mieux avec le String.class

    Je vais me pencher sur le TableColumn.
    Merci de ton aide.
    @+

Discussions similaires

  1. [ODBC] Remplir une case d'un tableau manuellement
    Par chuspyto dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 22/03/2015, 22h30
  2. Linker une case d'un tableau avec un autre
    Par Zambinou dans le forum C
    Réponses: 6
    Dernier message: 02/12/2010, 13h14
  3. Réponses: 1
    Dernier message: 08/05/2009, 23h12
  4. Lire une case de mon tableau
    Par v4np13 dans le forum Langage
    Réponses: 4
    Dernier message: 20/08/2008, 14h32
  5. [JTable] comment colorer une case
    Par cladsam dans le forum Composants
    Réponses: 12
    Dernier message: 20/01/2005, 08h14

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