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] header renderer : pas d'effet


Sujet :

Composants Java

  1. #1
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Points : 909
    Points
    909
    Par défaut [JTable] header renderer : pas d'effet
    Bonjour,

    j'ai un tableau dont j'aimerais modifier la couleur du fond du header pour chaque colonne, j'ai donc implémenter un cellrenderer et fait un setTableHeaderRenderer mais ca ne fonctionne pas.

    Je suppose que je fais un truc pas bien (ou pas du tout)

    code de mon renderer :

    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
     
    import java.awt.Color;
    import java.awt.Component;
     
    import javax.swing.JLabel;
    import javax.swing.JTable;
    import javax.swing.table.TableCellRenderer;
     
     
    public class ResultTableHeaderRenderer extends JLabel implements TableCellRenderer{
     
    	boolean  _selected = false;
     
     
    	ResultTableHeaderRenderer(String columnName)
    	{
    		super(columnName);
     
    	}
     
    	public void setSelected(boolean select)
    	{
    		_selected = select;
    	}
     
    	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
     
    		if (_selected)
    		this.setBackground(new Color(255,127,80));
    		else
    			this.setBackground( new Color(141,182,205));
    		return this;
    	}
     
    }
    quand je demande de printer le headerRenderer d'une colonne ca me met bien un objet de type ResultTableHeaderRenderer ce n'est donc pas un problème d'affectation ...

    Un idée ?

  2. #2
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Points : 96
    Points
    96
    Par défaut
    Retourne un JLabel auquel tu mets la couleur de fond.

    - JLable monLabel = new JLabel()

    - Tu récupère ton objet et fais le traitement que tu veux.
    MonObjet monObjet = (MonObjet) value

    monLabel.setText(monObjet.maMethode())3
    monLabel.setColor(maColor);
    return monLabel;


    Et voila c'est pas plus compliqué.

  3. #3
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par L Ankou
    Retourne un JLabel auquel tu mets la couleur de fond.

    - JLable monLabel = new JLabel()

    - Tu récupère ton objet et fais le traitement que tu veux.
    MonObjet monObjet = (MonObjet) value

    monLabel.setText(monObjet.maMethode())3
    monLabel.setColor(maColor);
    return monLabel;


    Et voila c'est pas plus compliqué.
    euh .. ce n'est pas déjà ce que je fais ?

    retourner où ? (je comprend pas exactement ce que tu entend par "retourne un jlabel ..." ...)

  4. #4
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Points : 909
    Points
    909
    Par défaut
    *remonte* .. je n'y arrive toujours pas ...
    queqlqu'un ??
    un petit code d'un exemple qui marche ?? ...
    *rah y a pas de smiley puppy eyes !* lol)

  5. #5
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Points : 96
    Points
    96
    Par défaut
    art, par retourné je voulais dire qu'a la fin de getTableCellRendererComponent(...) tu fais un return monLabel comme ca tu return un objet de type JLabel et non pas un renderer

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 137
    Points : 143
    Points
    143
    Par défaut
    Et en mettant setOpaque à true ??


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ResultTableHeaderRenderer(String columnName)
    	{
    		super(columnName);
    		setOpaque(true);
    	}

  7. #7
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Points : 909
    Points
    909
    Par défaut
    ok ...

    alors en retournant un JLable j'ai fait expres de retourner toujours le meme texte pour voir :

    resultat : j'ai bien le meme texte dans toutes les colonne de mon header .. mais toujours pas de couleur T T

    ah je viens d'essayer le html .. le texte change bien de couleur ... j'ai donc un problème de setBackground qui set rien du tout .. bon tant pis le html marchant je vais me debrouiller avec ^^

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 137
    Points : 143
    Points
    143
    Par défaut
    essaie avec le setopaque, ca devrait marcher

    et s'il le faut, mets le setopaque(true) dans la méthode gettablecellrenderer

  9. #9
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Points : 96
    Points
    96
    Par défaut
    Arf quel idiot que je suis !!

    Heureusement que t'as résolu le problème, j'étais partis sur l'idée de couleur de fond pour les cellules et non pas pour le tableHeader.

    En effet, le html va donc t'aider et le label ne servir a rien, sorry.

  10. #10
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par thomas_strass
    essaie avec le setopaque, ca devrait marcher

    et s'il le faut, mets le setopaque(true) dans la méthode gettablecellrenderer
    j'ai essayer et ca n'a pas fait grand chose (merci quand mêm ^^)

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 137
    Points : 143
    Points
    143
    Par défaut
    Un petit exemple :

    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
    import javax.swing.*;
    import javax.swing.table.*;
    import java.awt.*;
     
    public class TableHeaderExample
    {
    public static void main(String[] args)
    {
    	JFrame f = new JFrame();
     
    	JPanel c = (JPanel)f.getContentPane();
    	c.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
     
    	JTable t = new JTable(new ExampleTableModel());
    	t.getTableHeader().setDefaultRenderer(new ExampleHeaderRenderer());
    	t.setIntercellSpacing(new Dimension(1, 1));
    	t.setShowHorizontalLines(false);
    	t.setShowVerticalLines(true);
    	t.setGridColor(Color.lightGray);
     
    	JScrollPane sp = new JScrollPane(t);
    	sp.setBackground(Color.white);
    	c.add(sp);
     
    	f.setSize(500, 500);
    	f.setVisible(true);
    }
     
     
    static public class ExampleHeaderRenderer extends DefaultTableCellRenderer
    {
    	public ExampleHeaderRenderer()
    	{
    		setOpaque(true);
    	}
     
    	public Component getTableCellRendererComponent(JTable table,
    	Object value, boolean selected, boolean focused,
    	int row, int column)
    	{
    		super.getTableCellRendererComponent(table, value, selected, focused, row, column);
     
    		setBackground(Color.red);
     
    		return this ;
    	}
    }
     
    static private class ExampleTableModel extends DefaultTableModel
    {
    	public int getRowCount()
    	{
    	return 10;
    	}
     
    	public int getColumnCount()
    	{
    	return 3;
    	}
     
    	public String getColumnName(int column)
    	{
    		switch (column)
    		{
    		case 0:
    			return "Song Name";
    		case 1:
    			return "Time";
    		default:
    			return "Artist";
    		}
    	}
     
    	public Object getValueAt(int row, int column)
    	{
    		switch (column)
    		{
    			case 0:
    			return "Fooing In The Wind";
    			case 1:
    			return "3:51";
    			default:
    			return "Foo Guy";
    		}
    	}
     
    	public boolean isCellEditable(int row, int column)
    	{
    		return false;
    	}
    }
    }

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 137
    Points : 143
    Points
    143
    Par défaut
    Une petite question : ta valeur "isSelected" que tu affectes, ca veut dire qu'une colonne en particulier doit etre peinte d'une certaine couleur, et les autres d'une couleur par défaut ???

    Parce que je pense qu'au lieu d'avoir un renderer propre à chaque colonne, tu devrais plutot utiliser la valeur contenue dans la variable "column", qui te donne quelle est la colonne qui doit etre repainte

  13. #13
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par thomas_strass
    Une petite question : ta valeur "isSelected" que tu affectes, ca veut dire qu'une colonne en particulier doit etre peinte d'une certaine couleur, et les autres d'une couleur par défaut ???

    Parce que je pense qu'au lieu d'avoir un renderer propre à chaque colonne, tu devrais plutot utiliser la valeur contenue dans la variable "column", qui te donne quelle est la colonne qui doit etre repainte
    nan chacune peut etre ou non selectionné individuellement (en faite cela correspond a présence d'un filtrage ou non sur les valeurs de la colonne)

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

Discussions similaires

  1. [JTABLE][MODEL][RENDERER]Communication
    Par cameleon2002 dans le forum Composants
    Réponses: 1
    Dernier message: 31/12/2005, 14h36
  2. [Jtable] DefaultTableModel renderer des boolean
    Par lilou77 dans le forum Composants
    Réponses: 2
    Dernier message: 20/12/2005, 15h32
  3. [JTable] cell renderer
    Par biozaxx dans le forum Composants
    Réponses: 2
    Dernier message: 21/04/2005, 10h04
  4. [Swing]Case a cocher JTable, et Renderer
    Par bibx dans le forum Composants
    Réponses: 16
    Dernier message: 29/12/2004, 14h49
  5. [JTable] Comment ne pas afficher les titres ?
    Par FabienBxl dans le forum Composants
    Réponses: 3
    Dernier message: 08/10/2003, 15h01

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