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] changer les couleurs sur un double clique


Sujet :

Composants Java

  1. #21
    Membre du Club Avatar de lkryss
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Points : 49
    Points
    49
    Par défaut
    je ne vois aucune difference
    j'ai essayé de faire ca aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (row == indexDeLaDerniereLigneDoubleCliquee) {
                              setBackground(Color.RED);
                 }
          else setBackground(Color.BLUE);
    la evidemment il n'y a que ma derniere ligne qui est en rouge, le reste est bleu, pour eviter cela je pourrai peut etre revenir a ta premiere idée et utiliser une liste pour stocker les lignes qui sont rouges.

  2. #22
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Et avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (row == indexDeLaDerniereLigneDoubleCliquee) {
    	setBackground(Color.RED);
    }
    super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

  3. #23
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Ca marche comme ça!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if (row == indexDeLaDerniereLigneDoubleCliquee)
    	setBackground(Color.red);
    else {
    	setBackground(Color.white);
    }
     
    Component comp = super.getTableCellRendererComponent(table, value, isSelected,
    					hasFocus, row, column);
     
    return this;
    [EDIT]
    Enfin non : ça colorie la ligne "indexDeLaDerniereLigneDoubleCliquee"...

    Je pense que tu vas devoir stocker les lignes sur lesquelles tu as double-cliqué...
    Sinon, une fois que tu as double-cliqué sur une ligne, il affecte la couleur de fond à toutes les autres...

  4. #24
    Membre du Club Avatar de lkryss
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Points : 49
    Points
    49
    Par défaut
    toujours pas
    ca ne souligne toujours que la derniere ligne, et non pas toutes celles sur lesquelles j'ai double cliqué. je reparts donc sur le systeme avec l'arraylist, ou j'ajoute la ligne a chaque fois que je double clique, et dans mon if je vais parcourir toute l'arraylist.

  5. #25
    Membre du Club Avatar de lkryss
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Points : 49
    Points
    49
    Par défaut
    bon mon code ressemble a ca maintenant :
    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
     
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row, int column) {
     
     
          System.out.println("fdiojfdspjfdsjfds");
          JLabel label = (JLabel) super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);
          int laTailleDeArrayList = monarraylist.size();
          for(int i=0; i<laTailleDeArrayList ; i++){
          if (row == Integer.parseInt( (String)monarraylist.get(i) )) {
     
                              setBackground(Color.RED);
                 }
          }				
          super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
          return this;
         }
        }
    je pense qu'il marche mais toute ma table se colorie en rouge tout de meme

  6. #26
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Il faut que tu rajoutes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    else {
        setBackground(Color.WHITE);
    }
    Et ça marchera.

  7. #27
    Membre du Club Avatar de lkryss
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Points : 49
    Points
    49
    Par défaut
    toujours pas
    c'est logique, quand tu regardes ma boucle si la ligne ou je suis n'est pas celle de mon index I alros tu mets tout en blanc, y compris les lignes situés a l'adresse I-1, en fait plus a chaque fosi que j'incremente, les lignes d'avant ne correspondent plsu a l'index et repasse rouge.

  8. #28
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Quand j'ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if (row == indexDeLaDerniereLigneDoubleCliquee)
    	setBackground(Color.red);
    else {
    	setBackground(Color.white);
    }
     
    Component comp = super.getTableCellRendererComponent(table, value, isSelected,
    					hasFocus, row, column);
     
    return this;
    J'avais juste la ligne "indexDeLaDerniereLigneDoubleCliquee" qui était en rouge et les autres en blanc.
    Donc normalement, si tu rajoutes le "else" comme je te l'ai dit dans le if de ta boucle for, ça devrait marcher...
    Je vais tester au cas où.

  9. #29
    Membre du Club Avatar de lkryss
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Points : 49
    Points
    49
    Par défaut
    je l'ai fait quand tu l'as demandé mais ca ne marche pas, je n'ai toujours que la derniere ligne qui reste rouge. pour la raison de l'incrementation foireuse je pense

  10. #30
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Aller, on va y arriver!
    Vire la boucle for et remplace ton if par celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (monarraylist.contains(new Integer(row))) {
    Alors?

  11. #31
    Membre du Club Avatar de lkryss
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Points : 49
    Points
    49
    Par défaut
    erf la je craque ca ne colorie meme plus de lignes mais je pense que l'utilisation du contains() est une bonne idée, mais peut etre mal placée, je vais essayer differentes choses.
    quand on aura trouver comment faire j'ecris un tuto sur les jtables
    tite pause et je m'y remet, en tout cas merci de ton aide

  12. #32
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Citation Envoyé par lkryss
    erf la je craque ca ne colorie meme plus de lignes
    Je ne comprends pas, chez moi ça marchait...

  13. #33
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Voilà tout ce que j'ai fait et ça marche sur ma JTable :
    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
     
    // dans le constructeur de ma JDialog, je crée ma table et je fais :
    maTable.setDefaultRenderer(Object.class, new MyTableCellRenderer());
     
    // je crée mon renderer comme ça :
    	class MyTableCellRenderer extends DefaultTableCellRenderer {
    		protected ArrayList monarraylist;
     
    		public MyTableCellRenderer() {
    			monarraylist = new ArrayList(3);
    			monarraylist.add(0, new Integer(1));
    			monarraylist.add(1, new Integer(4));
    			monarraylist.add(2, new Integer(3));
    		}
     
    		public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row, int column) {
    			if (monarraylist.contains(new Integer(row))) {
    				setBackground(Color.RED);
    			}
    			else {
    				setBackground(Color.WHITE);
    			}
     
    			super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
     
    			return this;
    		}
    	}
    Bon dans cet exemple, j'ai rempli en dur mon ArrayList, mais ça me colorie bien les lignes 1, 3 et 4...

  14. #34
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    J'ai rajouté ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    maTable.setDefaultRenderer(Double.class, new MyTableCellRenderer());
    maTable.setDefaultRenderer(Integer.class, new MyTableCellRenderer());
    Pour appliquer le renderer à toutes les colonnes de ma table (qui contiennent des String, des Integer et des Double) et j'obtiens ce que tu vois sur table.gif...
    Images attachées Images attachées  

  15. #35
    Membre du Club Avatar de lkryss
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Points : 49
    Points
    49
    Par défaut
    désolé pour le temps de réponse, probleme de up de mes sources
    j'ai fait exactement ce que tu as fait et aucun resultats.

    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
     
    public class chantier_en_cours extends javax.swing.JFrame implements ActionListener , MouseListener  {
        private javax.swing.JScrollPane jScrollPane2;
        public javax.swing.JTable jTable2;
        public int indexDeLaDerniereLigneDoubleCliquee;
        private boolean DEBUG = false;
        ArrayList monarraylist = new ArrayList();
     
        public chantier_en_cours() {Object chelou[][]= noyau.bddChantierEnCour.chopeListeChantier(chalou);
            String[] titreColonnes = { "1", "2", "3","4", "5","6","7"};
            JTable jTable2 = new JTable(chelou, titreColonnes);
            this.jTable2 = jTable2;
            JScrollPane jScrollPane12 = new JScrollPane();
            jTable2.setModel(new MyTableModel(chelou, titreColonnes));
            getContentPane().add(jScrollPane12,new org.netbeans.lib.awtextra.AbsoluteConstraints(50, 20, 700, 500));
            jScrollPane12.setOpaque(true);
            jTable2.setOpaque(true);
            jScrollPane12.setViewportView(jTable2);
            this.jButton1.addActionListener(this);
            this.jScrollPane2= jScrollPane12;
            this.jTable2 = jTable2;
            this.jTable2.addMouseListener(this);
            jTable2.setDefaultRenderer(String.class, new ColorRenderer());
            jTable2.setDefaultRenderer(Double.class, new ColorRenderer());
            jTable2.setDefaultRenderer(Integer.class, new ColorRenderer());
        }
    public void mouseClicked(MouseEvent m) {
    		if (m.getClickCount() == 2) {
    			System.out.println("bobobob");
                            int indexDeLaDerniereLigneDoubleCliquee = jTable2.getSelectedRow();
                            String myString = Integer.toString(indexDeLaDerniereLigneDoubleCliquee);
                            this.monarraylist.add((Object)myString);
                            this.indexDeLaDerniereLigneDoubleCliquee = indexDeLaDerniereLigneDoubleCliquee;
     
     
    	}
        }
    class ColorRenderer extends DefaultTableCellRenderer {
             public ColorRenderer() {
                }
             public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row, int column) {
                  if (monarraylist.contains(new Integer(row))){
                                      setBackground(Color.RED);
                                      System.out.println("haha");
                         }
                  else {
                        setBackground(Color.WHITE);
                       }
              super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
     
              return this;
             }
        }
    }
    je ne vois pas ou est mon erreur, je pense que ca vient de mon arraylist qui n'est pas lu correctement, mais je sais qu'il est par contre rempli correctement.
    edit : la je n'ai plsu rien qui se produit, plus de rouge nul part :/

  16. #36
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Ca doit venir du fait que tu remplis ton ArrayList avec des String et que tu regardes si elle contient des Integer...

    Remplis-la avec des Integer plutôt que des String.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (m.getClickCount() == 2) {
    	System.out.println("bobobob");
    	int indexDeLaDerniereLigneDoubleCliquee = jTable2.getSelectedRow();
    	this.monarraylist.add(new Integer(indexDeLaDerniereLigneDoubleCliquee ));
    	this.indexDeLaDerniereLigneDoubleCliquee = indexDeLaDerniereLigneDoubleCliquee;
    }

  17. #37
    Membre du Club Avatar de lkryss
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Points : 49
    Points
    49
    Par défaut

    bingo, ca marche enfin

  18. #38
    Membre habitué
    Profil pro
    Administrateur système
    Inscrit en
    Mai 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Administrateur système

    Informations forums :
    Inscription : Mai 2002
    Messages : 144
    Points : 159
    Points
    159
    Par défaut
    Voici un post qui m'a beaucoup aidé et je tenais à en remercier les 2 contributeurs.
    Personnellement, j'ai adapté le code pour qu'un double-clic sur une ligne déja coloriée la remette à son état initial.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ...
    if (evt.getClickCount() == 2) 
    		{
    			System.out.println("bobobob");
                            int LigneDoubleCliquee = jTable.getSelectedRow();
                            if (this.monarraylist.indexOf(LigneDoubleCliquee)==-1)
                                this.monarraylist.add(new Integer(LigneDoubleCliquee ));
                            else
                                this.monarraylist.remove(new Integer(LigneDoubleCliquee ));
                            //this.indexDeLaDerniereLigneDoubleCliquee = LigneDoubleCliquee;                                 
    		}
    Si un jour on te reproche que ton travail n'est pas un travail de professionnel, dis-toi bien que l'Arche de Noé a été construite par des amateurs et le Titanic par des professionnels...

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Changer la couleur sur clique d'un onglet dans un menu
    Par nadiaflamingenierie dans le forum Général JavaScript
    Réponses: 44
    Dernier message: 18/04/2008, 15h56
  2. Aide pour changer de couleur sur les primitifs GLUT
    Par romainhoarau2764 dans le forum GLUT
    Réponses: 3
    Dernier message: 19/03/2005, 13h30
  3. [JTable] Changer les données
    Par norkius dans le forum Composants
    Réponses: 12
    Dernier message: 27/01/2005, 14h51
  4. [Forms] changer les couleurs
    Par Nounoursonne dans le forum Forms
    Réponses: 11
    Dernier message: 02/04/2004, 09h40
  5. Changer les couleurs de la palette avec du RGB
    Par le mage tophinus dans le forum x86 16-bits
    Réponses: 11
    Dernier message: 13/01/2003, 08h55

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