begin process at 2010 02 09 23:14:51
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > CLASS RENDERER POUR JTABLE POUR AFFICHE UNE LIGNE SUR 2 DE COULEURS DIFERENTE

CLASS RENDERER POUR JTABLE POUR AFFICHE UNE LIGNE SUR 2 DE COULEURS DIFERENTE


 Information sur la source

Note :
9,5 / 10 - par 2 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Astuces Niveau :Débutant Date de création :14/11/2003 Vu / téléchargé :14 173 / 846

Auteur : GodConan

Ecrire un message privé
Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note

 Description

class toute simple a instantier ds une jtable apres lavoir parametrer
c un exemple bien pratique que j orai bien aimé avoir qd j ai  debute  ;o)
bien sur la class peut etre enrichie et ofre pas mal de possibilité

Source

  • import java.awt.Color;
  • import java.awt.Component;
  • import java.io.Serializable;
  • import javax.swing.JLabel;
  • import javax.swing.JTable;
  • import javax.swing.UIManager;
  • 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, Serializable
  • {
  • protected static Border noFocusBorder;
  • private Color unselectedForeground;
  • private Color unselectedBackground;
  • private Color unselectedForegroundAlt;
  • private Color unselectedBackgroundAlt;
  • private Color selectedForeground;
  • private Color selectedBackground;
  • private int alternateInc;
  • public AlternateCellTableModel()
  • {
  • super();
  • noFocusBorder = new EmptyBorder(1, 2, 1, 2);
  • setOpaque(true);
  • setBorder(noFocusBorder);
  • alternateInc = 0;
  • }
  • public void setInterval( int i )
  • {
  • alternateInc = i;
  • }
  • public void setColorsSel( Color back, Color fore )
  • {
  • selectedForeground = fore;
  • selectedBackground = back;
  • }
  • public void setColorsAlt( Color back, Color fore )
  • {
  • unselectedForegroundAlt = fore;
  • unselectedBackgroundAlt = back;
  • }
  • public void setColors( Color back, Color fore )
  • {
  • unselectedForeground = fore;
  • unselectedBackground = back;
  • }
  • public void setForeground(Color c)
  • {
  • super.setForeground(c);
  • unselectedForeground = c;
  • }
  • public void setBackground(Color c)
  • {
  • super.setBackground(c);
  • unselectedBackground = c;
  • }
  • public void updateUI()
  • {
  • super.updateUI();
  • setForeground(null);
  • setBackground(null);
  • }
  • public Component getTableCellRendererComponent(JTable table, Object value,
  • boolean isSelected, boolean hasFocus, int row, int column)
  • {
  • try
  • {
  • boolean alternateColor = false; // on demare par la couleur de fon
  • // init l interval pour le suivi des ligne en fonction du scroll
  • float dec = (float)( row ) / (float)( alternateInc * 2 );
  • dec -= (int)dec; // me rest que les parti decimal
  • dec *= ( alternateInc * 2 ); // g un resulta entre 0 et ( intervalAlternate * 2 )
  • dec += .5; // pour eviter le movai bornage de larondi ;o)
  • int interval = (int) dec;
  • if ( interval >= alternateInc ) //deja alterner
  • {
  • if ( alternateInc != 0 ) { alternateColor = !alternateColor;}
  • interval -= alternateInc;
  • }
  • // fin de linit du decalage de l intevale
  • if ( isSelected )
  • {
  • // gestion des couleur de selection
  • super.setForeground( ( selectedForeground != null) ? selectedForeground : table.getSelectionForeground() );
  • super.setBackground( ( selectedBackground != null) ? selectedBackground : table.getSelectionBackground() );
  • }
  • else
  • {
  • // gestion des couleurs alternées en fonction des variable initialisé avan ;o)
  • if ( alternateColor )
  • {
  • super.setForeground( ( unselectedForeground != null) ? unselectedForegroundAlt : table.getForeground() );
  • super.setBackground( ( unselectedBackgroundAlt != null) ? unselectedBackgroundAlt : table.getBackground() );
  • }
  • else
  • {
  • super.setForeground( ( unselectedForeground != null) ? unselectedForeground : table.getForeground() );
  • super.setBackground( ( unselectedBackground != null) ? unselectedBackground : table.getBackground() );
  • }
  • }
  • setFont( table.getFont() );
  • if ( hasFocus )
  • {
  • setBorder( UIManager.getBorder("Table.focusCellHighlightBorder") );
  • if ( table.isCellEditable( row, column ) )
  • {
  • super.setForeground( UIManager.getColor("Table.focusCellForeground") );
  • super.setBackground( UIManager.getColor("Table.focusCellBackground") );
  • }
  • }
  • else
  • {
  • setBorder( noFocusBorder );
  • }
  • this.setHorizontalAlignment( JLabel.CENTER );
  • /*
  • // 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() );
  • }
  • }
import java.awt.Color;
import java.awt.Component;
import java.io.Serializable;

import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.UIManager;
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, Serializable
{

    protected static Border noFocusBorder; 
    
    private Color unselectedForeground; 
    private Color unselectedBackground; 
    private Color unselectedForegroundAlt; 
    private Color unselectedBackgroundAlt; 
    private Color selectedForeground; 
    private Color selectedBackground; 
    private int alternateInc;

    public AlternateCellTableModel() 
    {
	    super();
        noFocusBorder = new EmptyBorder(1, 2, 1, 2);
	    setOpaque(true);
        setBorder(noFocusBorder);
        alternateInc = 0;
	}
    
    public void setInterval( int i )
    {
        alternateInc = i;
    }

    public void setColorsSel( Color back, Color fore ) 
    {
        selectedForeground = fore; 
        selectedBackground = back; 
    }

    public void setColorsAlt( Color back, Color fore ) 
    {
        unselectedForegroundAlt = fore; 
        unselectedBackgroundAlt = back; 
    }
    
    public void setColors( Color back, Color fore ) 
    {
        unselectedForeground = fore; 
        unselectedBackground = back; 
    }
    
    public void setForeground(Color c) 
    {
        super.setForeground(c); 
        unselectedForeground = c; 
    }
    
    public void setBackground(Color c) 
    {
        super.setBackground(c); 
        unselectedBackground = c; 
    }

    public void updateUI() 
    {
        super.updateUI(); 
	    setForeground(null);
	    setBackground(null);
    }
    
    public Component getTableCellRendererComponent(JTable table, Object value,
                          boolean isSelected, boolean hasFocus, int row, int column) 
    {
        try
        {
        boolean alternateColor = false; // on demare par la couleur de fon
        // init l interval pour le suivi des ligne en fonction du scroll
        float dec = (float)( row ) / (float)( alternateInc * 2 );
        dec -= (int)dec; // me rest que les parti decimal
        dec *= ( alternateInc * 2 ); // g un resulta entre 0 et ( intervalAlternate * 2 )
        dec += .5; // pour eviter le movai bornage de larondi ;o)
        int interval = (int) dec;
        if ( interval >= alternateInc ) //deja alterner
        {
    	    if ( alternateInc != 0 ) { alternateColor = !alternateColor;}
    	    interval -= alternateInc;
        }
        // fin de linit du decalage de l intevale

	    if ( isSelected ) 
	    {
	        // gestion des couleur de selection
	        super.setForeground( ( selectedForeground != null) ? selectedForeground : table.getSelectionForeground() );
	        super.setBackground( ( selectedBackground != null) ? selectedBackground : table.getSelectionBackground() );
    	}
	    else 
	    {
	        // gestion des couleurs alternées en fonction des variable initialisé avan ;o)
	        if ( alternateColor )
	        {
	            super.setForeground( ( unselectedForeground != null) ? unselectedForegroundAlt : table.getForeground() );
	            super.setBackground( ( unselectedBackgroundAlt != null) ? unselectedBackgroundAlt : table.getBackground() );
	        }
	        else
	        {
	            super.setForeground( ( unselectedForeground != null) ? unselectedForeground : table.getForeground() );
	            super.setBackground( ( unselectedBackground != null) ? unselectedBackground : table.getBackground() );
	        }
    	}

	    setFont( table.getFont() );
    	if ( hasFocus ) 
    	{
	        setBorder( UIManager.getBorder("Table.focusCellHighlightBorder") );
	        if ( table.isCellEditable( row, column ) ) 
	        {
	            super.setForeground( UIManager.getColor("Table.focusCellForeground") );
	            super.setBackground( UIManager.getColor("Table.focusCellBackground") );
    	    }
	    } 
	    else 
	    {
	        setBorder( noFocusBorder );
	    }
	    this.setHorizontalAlignment( JLabel.CENTER );
/*
        // 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() );
    }

}

 

 Conclusion

la parti test du type peu se gerer avec instanceOf au lieu de tester la le nom de la class.
pour alleger la class on peu ossi enlever la gestion du focus...

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture GESTION DE STOCK AVEC DATE LIMITE (MYSQL, JTREE, TREEMODEL E...
Source avec Zip TRANFER MULTIPLE DE MAIL A PARTIR D UN FICHIER D ADDRESSE
Source avec Zip Source avec une capture JEU DE PONG DONNANT DE BONNES BASE POUR LA PROGRAMMATION GRA...
Source avec Zip CLASS D'ARCHIVAGE/DESARCHIVAGE ;O) DS UN FICHIER DE TYPE ZIP
Source avec Zip Source avec une capture TRACER DE COURBE A PARTIR D UNE JTABLE

 Sources de la même categorie

Source avec Zip CLASS DEMINEUR par Niidhogg
AJOUTER LE MAIL À LA LISTE DE CONTACT HOTMAIL POUR EVOLUTION... par sarathai
Source avec Zip ENVOI MAIL AVEC JAVA par mdahmoune
Source avec Zip Source avec une capture JADE PAR LA PRATIQUE par mdahmoune
CHUNKEDXML, LIRE DU XML PAR MORCEAU par AlexN

Commentaires et avis

Commentaire de mouss11 le 14/06/2004 15:40:24

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

Commentaire de GodConan le 14/06/2004 21:07:13

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...




Commentaire de GodConan le 14/06/2004 21:08:24

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...




Commentaire de mouss11 le 14/06/2004 21:15:12

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 :)

Commentaire de GodConan le 14/06/2004 22:01:44

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...

++

Commentaire de mouss11 le 14/06/2004 22:04:29

Ok, merci beaucoup. Je suis pas au boulot là, donc je teste demain matin.

Commentaire de GodConan le 14/06/2004 22:04:47

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)

Commentaire de mouss11 le 14/06/2004 22:08:09

lol, mdr
moi j'ai juste essayé un truc du genre
if (row%2==0){
...
}
Mais ça donné toutes les lignes en noirs :(

Commentaire de mouss11 le 14/06/2004 22:38:42

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

Commentaire de mouss11 le 15/06/2004 09:06:52

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 :

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() );
}

}

Commentaire de GodConan le 15/06/2004 21:06:03

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é

++



Commentaire de Renus02 le 13/05/2005 14:42:45

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

Commentaire de GodConan le 14/05/2005 07:58:40

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)


++

Commentaire de henock le 29/08/2007 11:12:40

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

Commentaire de makizar le 03/12/2007 15:55:52

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à ;)

Commentaire de Romano58 le 30/07/2008 10:24:46

Mercie bôcoup pour cette source, qui m'a était tres utiles aussi ^^

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,374 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales