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 et couleur cellule


Sujet :

Composants Java

  1. #1
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut JTable et couleur cellule
    je vient de commencer mon premier exemple avec JTable et des le premier essaie ,çà na pas marché

    je veut colorer la cellule sur la quelle on a cliqué alors j'ai fait ce petit programme ,mais pas de résultat. a parement ya quelque chose qui manque dans le code.

    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
    import java.awt.Color;
    import java.awt.Component;
     
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.ListSelectionModel;
    import javax.swing.event.ListSelectionEvent;
    import javax.swing.event.ListSelectionListener;
    import javax.swing.table.TableCellRenderer;
     
     
     
    public class JTableListSelectionListener 
    {
     
      public static void main(String[] a) 
      {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
        final JTable table;
     
        String[] columnTitles = { "A", "B", "C", "D" };
        Object[][] rowData = { { "1", "2", "3", "4" }, { "1", "2", "3", "4"  },{ "1", "2", "3", "4"  }, { "1", "2", "3", "4" } };
     
        table = new JTable(rowData, columnTitles);
     
        table.setCellSelectionEnabled(true);
     
    	table.setDefaultRenderer(Color.class,new MonAfficheurCelluleCouleur());
     
        ListSelectionModel cellSelectionModel = table.getSelectionModel();
     
        cellSelectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
     
        frame.add(new JScrollPane(table));
        frame.setSize(300, 200);
        frame.setVisible(true);
      }
     
    }
     
     
    class MonAfficheurCelluleCouleur extends JLabel implements TableCellRenderer
    {
    	public MonAfficheurCelluleCouleur()
    	{
    		this.setOpaque(true);
    	}
     
    	public Component getTableCellRendererComponent(JTable table,Object value, boolean isSelected, boolean hasFocus, int row,int col)
    	{
    	           setBackground(Color.yellow);
     
    	            return this;
    	}
    }

  2. #2
    Membre éprouvé
    Inscrit en
    Juin 2009
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juin 2009
    Messages : 138
    Par défaut
    Je pense qu'il faut que tu utilises la méthode setSelectionBackground () plutôt que setBackGround ()...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setSelectionBackground (Color.YELLOW)

  3. #3
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Citation Envoyé par bého32 Voir le message
    Je pense qu'il faut que tu utilises la méthode setSelectionBackground () plutôt que setBackGround ()...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setSelectionBackground (Color.YELLOW)

    je pense pas car j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonAfficheurCelluleCouleur extends JLabel

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Ton "MonAfficheurCelluleCouleur" ne sera utilisé que pour des objets de type "Color". Or tu ne mets aucun objet de type "Color" dans ta JTable
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Membre éprouvé
    Inscrit en
    Juin 2009
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juin 2009
    Messages : 138
    Par défaut
    Au temps pour moi...

    Citation Envoyé par dinobogan Voir le message
    Ton "MonAfficheurCelluleCouleur" ne sera utilisé que pour des objets de type "Color". Or tu ne mets aucun objet de type "Color" dans ta JTable
    En effet, il faut que tu utilises ton MonAfficheurCelluleCouleur sur des éléments de type Object, et ça devrait mieux marcher...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table.setDefaultRenderer(Object.class,new MonAfficheurCelluleCouleur());

  6. #6
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Citation Envoyé par bého32 Voir le message
    Au temps pour moi...



    En effet, il faut que tu utilises ton MonAfficheurCelluleCouleur sur des éléments de type Object, et ça devrait mieux marcher...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table.setDefaultRenderer(Object.class,new MonAfficheurCelluleCouleur());
    j'ai déjà essayé avant de poster ,et ça me met tout les cellules en jaune

  7. #7
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    C'est normal le renderer est appliqué sur toutes les cellules C'est à toi de traiter les différents cas !



    De plus il serait préférable d'hériter de 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
    class MonAfficheurCelluleCouleur extends DefaultTableCellRenderer {
    	public Component getTableCellRendererComponent(JTable table, Object value,
    			boolean isSelected, boolean hasFocus, int row, int column) {
    		// On réinitialise les valeurs :
    		setBackground(null);
     
    		// On appelle la méthode parente qui initialisera tout comme il faut :
    		super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
     
    		// Puis on effectue nos modification :
    		if (hasFocus) {
    			setBackground( Color.YELLOW );
    		}
    		return this;
    	}
    }

    a++

  8. #8
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    adiGuba
    salut !
    dés que j'ai vu ton pseudo ,j'ai su que mon problème est résolu.
    mais encore une chose , la cellule change de couleur lorsque je clique dessus et si je change de cellule ,ça revient blanc(par défaut).
    peut être la stratégie est fausse dés le début

  9. #9
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par slim_java Voir le message
    mais encore une chose , la cellule change de couleur lorsque je clique dessus et si je change de cellule ,ça revient blanc(par défaut).
    Ce n'est pas ce que tu voulais faire ???


    a++

  10. #10
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Ce n'est pas ce que tu voulais faire ???


    a++
    non je veut garder les cellules sur les quel j'ai cliqué en jaune et les rendre blanc ( a l'état initial) a une action donnée.

  11. #11
    Membre éprouvé
    Inscrit en
    Juin 2009
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juin 2009
    Messages : 138
    Par défaut
    Ca risque de pas être top, mais si tu stockes dans un tableau les cellules sur lesquelles tu as cliquées... et après ton initialisation avec getTableCellRendererComponent() (comme proposée par adiguba), tu parcours ton tableau et fais un setBackground().

    Mais je veux bien croire qu'il y a sûrement plus efficace...

  12. #12
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    oui c'est ce que j'ai fait déjà

    car j'ai enlevé l'instruction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                   // On réinitialise les valeurs :
    		setBackground(null);
    et ça a pas donné les résultat prévu.

    mais ça me convient pas et je partage le même point de vue
    Citation Envoyé par bého32 Voir le message
    il y a sûrement plus efficace...

  13. #13
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Précises ce que tu veux faire exactement... Parce que ce n'est pas clair du tout !

    a++

  14. #14
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Précises ce que tu veux faire exactement
    j'ai chercher une autre idée pour résoudre mon problème et dans laquelle j'utilise pas un JTable mais juste un rendu semblable
    j'espère entamer le sujet des JTables dans d'autre projets car pour le moment j'ai pas le temps (malheureusement) pour m'adapter a ce composant que j'ai pas utiliser auparavant.

    merci pour vos réponses.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/06/2011, 14h12
  2. [Swing / JTable] Rendre les cellules d'un JTable non éditables
    Par Jérôme_20 dans le forum Composants
    Réponses: 20
    Dernier message: 10/02/2011, 11h32
  3. JTable et couleurs des cellules
    Par maxime_c dans le forum Composants
    Réponses: 7
    Dernier message: 17/03/2009, 10h48
  4. [JTable] Fond de cellule couleur dégradée
    Par zuzuu dans le forum Composants
    Réponses: 9
    Dernier message: 13/01/2009, 23h49
  5. Réponses: 9
    Dernier message: 12/08/2002, 08h38

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