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]Définir à tout moment le background d'une cellule


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de krolineeee
    Inscrit en
    Mars 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 232
    Par défaut [JTable]Définir à tout moment le background d'une cellule
    Bonjour,

    Je recherche une méthode permettant d'affecter une couleur à une cellule d'un JTable.
    J'ai épluché énormément de forum et de tuto mais à aucun moment je n'ai trouvé ce que je cherche.

    J'aimerai pouvoir, à tout moment, faire un table.setBgColorAt(int row, int col, Color c); et ne surtout pas avoir une condition fixe dans le "prepareRenderer" pour déterminer la couleur.

    j'ai trouvé ce genre de chose :
    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
    public TableColumnColor()
             {
             DefaultTableModel dtm = new DefaultTableModel(data,columnNames);
             JTable table=new JTable(dtm)
                 {
                 public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
                     {
                     Component component = super.prepareRenderer(renderer,row,column);
     
                     if(column == 0)
                         {
                         component.setBackground(Color.yellow);
                     }
                     if(column == 1)
                         {
                         component.setBackground(Color.red);
                     }
                     if(column == 2)
                         {
                         component.setBackground(Color.pink);
                     }
                     return component;
                 }
             };
     
             JScrollPane scroll=new JScrollPane(table);
             this.setContentPane(scroll);
             this.setBounds(100,50,300,150);
         }
    et c'est tout à fait ce dont il ne me faut pas
    Alors si quelqu'un à une idée.... Merci

  2. #2
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Donc tu veut pouvoir changer à tout moment une couleur de cellule ?

    Le mieux, je pense, c'est d'avoir un tableau avec un couleur pour chaque case et un renderer qui se base sur ce tableau pour changer la couleur des cases.

  3. #3
    Membre confirmé Avatar de krolineeee
    Inscrit en
    Mars 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 232
    Par défaut
    Citation Envoyé par wichtounet
    Donc tu veut pouvoir changer à tout moment une couleur de cellule ?

    Le mieux, je pense, c'est d'avoir un tableau avec un couleur pour chaque case et un renderer qui se base sur ce tableau pour changer la couleur des cases.
    Oui j'ai tester cela, mais quand je fais appel (apres la création) à la fonction setColorAt(...), ça ne fonctionne pas, en fait, la méthode que j'ai faite fonctionne à la création, mais si une fois le tableau créé, je veux changer la couleur d'une cellule, ça ne fonctionne pas.

    Voilà la classe dont je parle :
    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
     
    class LeTable extends JTable {
        public LeTable() {
            try {
                jbInit();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
     
        private Color[][] m_cBgColor;
        protected int m_iNbRow;
        protected int m_iNbCol;
        LeTable(Object[][] m_oDatas, String[] m_sTitres) {
            super(new LeTableModel(m_oDatas, m_sTitres));
            m_iNbRow = m_oDatas.length;
            m_iNbCol = m_sTitres.length;
            LeTableCellRenderer renderer = new LeTableCellRenderer();
            this.setDefaultRenderer(Object.class, renderer);
            this.setSelectionBackground(Color.YELLOW);
            this.setSelectionForeground(Color.BLUE);
            this.setGridColor(Color.black);
            this.setRowHeight(20);
            initColor();
        }
     
        protected void initColor() {
            m_cBgColor = new Color[m_iNbRow][m_iNbCol];
            for (int i = 0; i < m_iNbRow; i++) {
                for (int j = 0; j < m_iNbCol; j++) {
                    m_cBgColor[i][j] = Color.WHITE;
                }
            }
        }
     
        /**
         * setBackgroungColorAt
         *
         * @param c Color
         * @param row int
         * @param col int
         */
        public void setBackgroungColorAt(Color c, int row, int col) {
            m_cBgColor[row][col] = c;
        }
     
        private void jbInit() throws Exception {
        }
     
        class LeTableCellRenderer extends DefaultTableCellRenderer {
            public Component getTableCellRendererComponent(
                    JTable table, Object value, boolean isSelected,
                    boolean hasFocus, int row, int col) {
     
                Color BACKGROUND_SELECTED = Color.YELLOW;
                Color FOREGROUND_SELECTED = Color.BLUE;
                Color BACKGROUND = Color.WHITE;
                Color FOREGROUND = Color.BLACK;
     
                // on utilise le renderer super qui va tenir compte de
                // tout ce qu'on a besoin (sélection, focus)
                Component comp = super.
                                 getTableCellRendererComponent(
                                         table, value, isSelected, hasFocus, row,
                                         col);
                comp.setBackground(m_cBgColor[row][col]);
     
                if (isSelected) {
                    this.setBackground(BACKGROUND_SELECTED);
                    this.setForeground(FOREGROUND_SELECTED);
                    this.setHorizontalAlignment(JLabel.CENTER);
                } else {
                    //this.setBackground(BACKGROUND);
                    this.setForeground(FOREGROUND);
                    this.setHorizontalAlignment(JLabel.CENTER);
                }
     
                return this;
            }
        }
    }

  4. #4
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Citation Envoyé par krolineeee
    Oui j'ai tester cela, mais quand je fais appel (apres la création) à la fonction setColorAt(...), ça ne fonctionne pas, en fait, la méthode que j'ai faite fonctionne à la création, mais si une fois le tableau créé, je veux changer la couleur d'une cellule, ça ne fonctionne pas.
    Où est-ce que tu modifies ton tableau m_cBgColor?

  5. #5
    Membre confirmé Avatar de krolineeee
    Inscrit en
    Mars 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 232
    Par défaut
    Citation Envoyé par seiryujay
    Où est-ce que tu modifies ton tableau m_cBgColor?
    là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void setBackgroungColorAt(Color c, int row, int col) {
            m_cBgColor[row][col] = c;
        }

  6. #6
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Ce que je voulais dire, c'est où est-ce que tu appelles cette méthode?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/06/2014, 14h27
  2. Quitter un programme à tout moment à l'appuie d'une touche
    Par Bash01 dans le forum Général Java
    Réponses: 5
    Dernier message: 19/07/2011, 13h25
  3. sortir d'un programme à tout moment
    Par blabla06 dans le forum Windows
    Réponses: 3
    Dernier message: 04/06/2008, 14h14
  4. Sortir a tout moment d'une machine d'etats
    Par Jerepain dans le forum C++Builder
    Réponses: 3
    Dernier message: 08/06/2007, 17h15
  5. Changer le background d'une cellule de JTable
    Par m@t dans le forum Composants
    Réponses: 8
    Dernier message: 27/11/2005, 17h28

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