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 :

TableCellRenderer et couleur alternée des lignes d'un JTable


Sujet :

Composants Java

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2002
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 152
    Points : 94
    Points
    94
    Par défaut TableCellRenderer et couleur alternée des lignes d'un JTable
    Bonjour à tous,

    J'ai fixé la propriété du UIManager pour alterner la couleur des lignes d'un JTable grâce à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UIManager.put("Table.alternateRowColor", new Color(240, 240, 240));
    Je redéfini le rendu de certaines cellules grâce à un TableCellRenderer qui hérite d'un JLabel comme 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    public class ComboBoxRenderer extends JLabel implements TableCellRenderer {
     
    	@SuppressWarnings("unused")
    	@Override
    	public Component getTableCellRendererComponent(
    			JTable table,
    			Object value,
    			boolean isSelected,
    			boolean hasFocus,
    			int row,
    			int column) {
     
    		super.setText(((JComboBox) value).getSelectedItem().toString());
     
    		if (isSelected) {
     
    			super.setBackground(table.getSelectionBackground());
    			super.setForeground(table.getSelectionForeground());
    		}
    		else {
     
    			super.setBackground(table.getBackground());
    			super.setForeground(table.getForeground());
    		}
     
    		return this;
    	}
     
    }
    En faisant ainsi ou même sans redéfinir les couleurs du texte et du fond, je perds l'alternance de couleur de ligne sur les cellules concernées, dont le fond reste blanc.

    Çà ne change rien non plus si je fais un setOpaque(false); sur le JLabel.

    Savez-vous comment faire pour corriger ce problème ?

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Et comme ceci (en s'appuyant sur le composant préparé par le DefaultTableCellRenderer):

    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 class ComboBoxRenderer extends JLabel implements TableCellRenderer {
     
        @SuppressWarnings("unused")
        @Override
        public Component getTableCellRendererComponent(
                JTable table,
                Object value,
                boolean isSelected,
                boolean hasFocus,
                int row,
                int column) {
            JLabel l = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            l.setText(((JComboBox) value).getSelectedItem().toString());
     
            if (isSelected) {
     
                l.setBackground(table.getSelectionBackground());
                l.setForeground(table.getSelectionForeground());
            }
            else {
     
                l.setBackground(table.getBackground());
                l.setForeground(table.getForeground());
            }
     
            return l;
        }
     
    }
    A noter toutefois qu'ajouter des composants Swing au modèle d'une JTable comme tu le fais est une mauvaise pratique.

    Pour faire propre on n'ajoute au modèle que des données, données sur lesquelles s'appuient le couple editor/renderer.

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2002
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 152
    Points : 94
    Points
    94
    Par défaut
    Excellent, çà fonctionne !

    Il faut juste hériter de DefaultTableCellRenderer car JLabel n'a pas de méthode getTableCellRendererComponent.

    Et j'ai aussi modifié mon code pour que mon modèle ne comporte que des données comme tu me l'as suggéré et çà m'arrange également sur bien des points, notamment sur le tri des colonnes qui était complètement faussé lorsque mon modèle comportait des objets.

    Merci beaucoup pour ce coup de pousse

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

Discussions similaires

  1. Couleur des lignes d'un JTable
    Par cricos dans le forum Composants
    Réponses: 3
    Dernier message: 29/02/2012, 17h37
  2. [JTable] coloration des lignes d'une JTable
    Par MathiasM dans le forum Composants
    Réponses: 3
    Dernier message: 22/06/2009, 10h19
  3. Couleur Alternée des lignes de Tableau
    Par kfmystik dans le forum Deski
    Réponses: 2
    Dernier message: 05/02/2009, 10h32
  4. Coloration alternée des lignes d'un tableau
    Par Sherkann dans le forum BIRT
    Réponses: 5
    Dernier message: 05/06/2008, 10h08
  5. Réponses: 18
    Dernier message: 18/02/2008, 13h01

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