CLASS RENDERER POUR JTABLE POUR AFFICHE UNE LIGNE SUR 2 DE COULEURS DIFERENTE
mouss11
Messages postés43Date d'inscriptionmercredi 22 mai 2002StatutMembreDernière intervention29 octobre 2007
-
14 juin 2004 à 15:40
Utilisateur anonyme -
30 juil. 2008 à 10:24
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Mercie bôcoup pour cette source, qui m'a était tres utiles aussi ^^
cs_makizar
Messages postés2Date d'inscriptionvendredi 11 août 2006StatutMembreDernière intervention20 janvier 2008 3 déc. 2007 à 15:55
il ya beuacoup plus simple en effet, il suffit de mettre la condition :
JLabel result = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (row%2==0){
result.setBackground(Color.red);
}
else {
result.setBackground(Color.black);
}
voilà ;)
cs_henock
Messages postés14Date d'inscriptionvendredi 15 avril 2005StatutMembreDernière intervention30 juillet 2010 29 août 2007 à 11:12
s'lut !
ton code me parait interessant mais seulement je ne sais pas comment on utilise le Renderer avec une colone.
STP es ce ke tu peux m'indiquer par un bout de code comment je peux utiliser ta classe AlternateCellTableModel à ma JTable.
merci d'avance
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 14 mai 2005 à 07:58
c est sympa quand meme ;o)...
Mais c vrai que la source n est pas toute jeune non plus ;o)... héhé maintenant je ne ferai plus du tout comme cela... ;o)
++
Renus02
Messages postés182Date d'inscriptionjeudi 20 mai 2004StatutMembreDernière intervention22 octobre 2010 13 mai 2005 à 14:42
je c'est que sa date mais tant pis je tenais a te remercier car ton code m'a etait super util ;) merci bcp
Renus
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 15 juin 2004 à 21:06
ben le problem c que tu ne peut pas reutiliser ta class ta tou mis en dur dedan.. ;o) et l interer de faire une class separer de ta table c justement de pouvoir en disposer pour d otre et pas forcement avec les meme couleur ;o) ;o)
autremen declare la en class locale c plus simple.. ;o)
et now pour tester la class d un Object on peut use instanceOf c un peut plus propre... ;o)
Mais bon ca doit fonctionner qd meme ;o) .. le but est dc atteind ;o) héhé
++
mouss11
Messages postés43Date d'inscriptionmercredi 22 mai 2002StatutMembreDernière intervention29 octobre 2007 15 juin 2004 à 09:06
J'ai refait le code à mes besoins, j'ai beaucoup moins de besoin que ton code à toi, enfin pour le moment en tout cas, enfin si quelque chose ne va pas dans mon code tu me le dis mais il marche bien :
/**
* class de dafichage pour les cellule d une JTable
* cette class permet un coloriage alternatif du fond
*
* @author Ludo
* @version 1
* @since 21.10.2001
* @see JTable
*/
public class AlternateCellTableModel extends JLabel
implements TableCellRenderer
{
protected static Border noFocusBorder;
private int alternateInc;
public AlternateCellTableModel()
{
super();
noFocusBorder = new EmptyBorder(1, 2, 1, 2);
setOpaque(true);
setBorder(noFocusBorder);
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column)
{
try
{
System.out.println("-" + row);
if ( (row%2)==0 )
{
super.setBackground(new Color(0.81f, 0.92f, 0.92f));
}else
{
super.setBackground(new Color(1f,1f,1f));
}
if (isSelected)
super.setBackground(new Color(0.1f,0.4f,0.80f));
// restituer ce morceau de code a la place de la ligne precedente pour alligner les text en fonction du type de la donne
// a droite pour du numeric et a gauche pour de l alphanum
// mais moi je prefere tou centrer ;o)
// sa pourrai ossi etre un parametre de la class
if ( table.getColumnClass( column ).getName().endsWith("String" ) ) // cest une string
{
this.setHorizontalAlignment( JLabel.LEFT ); //JLabel.CENTER );
}
else
{
this.setHorizontalAlignment( JLabel.RIGHT ); //JLabel.CENTER );
}
protected void setValue( Object value )
{
setText( ( value == null ) ? "" : value.toString() );
}
}
mouss11
Messages postés43Date d'inscriptionmercredi 22 mai 2002StatutMembreDernière intervention29 octobre 2007 14 juin 2004 à 22:38
euh, pas en noir lol, ce que je voulais dire c'est toutes les lignes était colorées et non une sur deux, pourtant ya pas plus simple comme script
mouss11
Messages postés43Date d'inscriptionmercredi 22 mai 2002StatutMembreDernière intervention29 octobre 2007 14 juin 2004 à 22:08
lol, mdr
moi j'ai juste essayé un truc du genre
if (row%2==0){
...
}
Mais ça donné toutes les lignes en noirs :(
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 14 juin 2004 à 22:04
arg je vien de relire le code ;o) c pas bien dur a ameliorer la c vraiment fait a l arache ;o) j etai jeune... ;o)
mouss11
Messages postés43Date d'inscriptionmercredi 22 mai 2002StatutMembreDernière intervention29 octobre 2007 14 juin 2004 à 22:04
Ok, merci beaucoup. Je suis pas au boulot là, donc je teste demain matin.
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 14 juin 2004 à 22:01
regarde un peu le source tu vera il est pas bien compliker ;o)
je ne me rapelle plus tro comment il fonctionne
mais il me semble qu il faut init toute les couleur qu il doi utiliser
pusi tu fait ton setrenderer...
cad tu instancie dabord ton renderer puis tu fait tous les setcolor ..
enfin la il doit y avoir des color pas defau ;o) dc ca doit pas etre ca
mais pour avoir les ligne 1/2 en couleur tu doit regler le 'pas ' : setInterval( 1 ) par exemple car par default il est a 0...
++
mouss11
Messages postés43Date d'inscriptionmercredi 22 mai 2002StatutMembreDernière intervention29 octobre 2007 14 juin 2004 à 21:15
oui je me suis rendu compte que je mettais pas comme il fallait, j'ai essayé sur des colonnes et ça prends bien en compte ton code, par contre j'ai pas compris où il faut paramétré donc je dois encore chercher, moi je veux juste la couleur 1 ligne sur 2 si tu peux m'aider
En tout cas un grand merci pour ton code :)
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 14 juin 2004 à 21:08
ben ds mon comment g precisé "apres l avoir parametrée" ;o) de plus je ne pense pas que tu utilise la bonne methode de la jtable moi j aplik mes renderer a des columns pas a la JTable direct...
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 14 juin 2004 à 21:07
ben ds mon comment g precisé "apres l avoir parametrée" ;o) de plus je ne pense pas que tu utilise la bonne methode de la jtable moi j aplik mes renderer a des columns pas a la JTable direct...
mouss11
Messages postés43Date d'inscriptionmercredi 22 mai 2002StatutMembreDernière intervention29 octobre 2007 14 juin 2004 à 15:40
Ton code m'intéresse énormément car je dois avoir une ligne sur deux en bleu clair ou gris dans ma JTable.
J'ai fait ça pour l'instancier :
jTableFiches.setDefaultRenderer(JLabel.class,new AlternateCellTableModel());
Mais ça ne marche pas, si tu pouvais m'aider stp
++ Mouss
30 juil. 2008 à 10:24
3 déc. 2007 à 15:55
JLabel result = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (row%2==0){
result.setBackground(Color.red);
}
else {
result.setBackground(Color.black);
}
voilà ;)
29 août 2007 à 11:12
ton code me parait interessant mais seulement je ne sais pas comment on utilise le Renderer avec une colone.
STP es ce ke tu peux m'indiquer par un bout de code comment je peux utiliser ta classe AlternateCellTableModel à ma JTable.
merci d'avance
14 mai 2005 à 07:58
Mais c vrai que la source n est pas toute jeune non plus ;o)... héhé maintenant je ne ferai plus du tout comme cela... ;o)
++
13 mai 2005 à 14:42
Renus
15 juin 2004 à 21:06
autremen declare la en class locale c plus simple.. ;o)
et now pour tester la class d un Object on peut use instanceOf c un peut plus propre... ;o)
Mais bon ca doit fonctionner qd meme ;o) .. le but est dc atteind ;o) héhé
++
15 juin 2004 à 09:06
import java.awt.Color;
import java.awt.Component;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
import javax.swing.table.TableCellRenderer;
/**
* class de dafichage pour les cellule d une JTable
* cette class permet un coloriage alternatif du fond
*
* @author Ludo
* @version 1
* @since 21.10.2001
* @see JTable
*/
public class AlternateCellTableModel extends JLabel
implements TableCellRenderer
{
protected static Border noFocusBorder;
private int alternateInc;
public AlternateCellTableModel()
{
super();
noFocusBorder = new EmptyBorder(1, 2, 1, 2);
setOpaque(true);
setBorder(noFocusBorder);
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column)
{
try
{
System.out.println("-" + row);
if ( (row%2)==0 )
{
super.setBackground(new Color(0.81f, 0.92f, 0.92f));
}else
{
super.setBackground(new Color(1f,1f,1f));
}
if (isSelected)
super.setBackground(new Color(0.1f,0.4f,0.80f));
// restituer ce morceau de code a la place de la ligne precedente pour alligner les text en fonction du type de la donne
// a droite pour du numeric et a gauche pour de l alphanum
// mais moi je prefere tou centrer ;o)
// sa pourrai ossi etre un parametre de la class
if ( table.getColumnClass( column ).getName().endsWith("String" ) ) // cest une string
{
this.setHorizontalAlignment( JLabel.LEFT ); //JLabel.CENTER );
}
else
{
this.setHorizontalAlignment( JLabel.RIGHT ); //JLabel.CENTER );
}
setValue( value );
}
catch (Exception e)
{ System.out.println("AlternateCellTableModel getTableCellRendererComponent() : "+e); }
return this;
}
protected void setValue( Object value )
{
setText( ( value == null ) ? "" : value.toString() );
}
}
14 juin 2004 à 22:38
14 juin 2004 à 22:08
moi j'ai juste essayé un truc du genre
if (row%2==0){
...
}
Mais ça donné toutes les lignes en noirs :(
14 juin 2004 à 22:04
14 juin 2004 à 22:04
14 juin 2004 à 22:01
je ne me rapelle plus tro comment il fonctionne
mais il me semble qu il faut init toute les couleur qu il doi utiliser
pusi tu fait ton setrenderer...
cad tu instancie dabord ton renderer puis tu fait tous les setcolor ..
enfin la il doit y avoir des color pas defau ;o) dc ca doit pas etre ca
mais pour avoir les ligne 1/2 en couleur tu doit regler le 'pas ' : setInterval( 1 ) par exemple car par default il est a 0...
++
14 juin 2004 à 21:15
En tout cas un grand merci pour ton code :)
14 juin 2004 à 21:08
14 juin 2004 à 21:07
14 juin 2004 à 15:40
J'ai fait ça pour l'instancier :
jTableFiches.setDefaultRenderer(JLabel.class,new AlternateCellTableModel());
Mais ça ne marche pas, si tu pouvais m'aider stp
++ Mouss