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] Colorier cellule selon sa valeur: 2 problemes


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Par défaut [JTABLE] Colorier cellule selon sa valeur: 2 problemes
    Bonsoir à tous,

    Avec beaucoup d'aide de certains d'entre vous (et je tiens à vous en remercier), j'ai enfin (presque) compris la philosophie du renderer et des jtable.

    Mais il me reste 2 problemes à resoudre:

    1/ les valeurs dispraissent de mon tableau lorsque je colorie des cellules
    2/ Je souhaite colorier la cellule selon sa propre valeur

    Un peu de detail:
    Mon model (le "if(columnIndex == 1 || columnIndex == 2 || columnIndex == 3 || columnIndex == 4) {" ne sert à rien pour l'instant et le "isCellEditable" permet que mon tableau ne soit pas editable par l'utilisteur (par la suite, il y aura moins une seule colonne editable, mais ce probleme n'est pas repris ici):
    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
     
    	public void setModel(TableModel model) {
    		jTable.setModel(model);
    		}
     
    	private JTable getJTable() {
    		if (jTable == null) {
     
    			String[] columsNames = {"Nom Fichier", "Taille (Ko)","Nbre analyses", "% plagié", "% confiance"};
    			String fichierConfig = "./config.txt";
    			File testFichier = new File(fichierConfig);
    			//Object[][] data = {{"Premier", new Integer(123),new Integer(112), new Integer(313),new Integer(98)},{"Deuxieme", new Integer(23),new Integer(12), new Integer(13),new Integer(48)}};
    			Object[][] data ; 
    			int nombreLignes = 0;
    			jTable = new JTable();
    DefaultTableModel defaultModel = new DefaultTableModel(columsNames,0)
    			{
     
    			    public Class getColumnClass(int columnIndex)
    			    {
     
    			    	jTable.getColumnModel().getColumn(0).setPreferredWidth(300);
    			          if(columnIndex == 1 || columnIndex == 2 || columnIndex == 3 || columnIndex == 4) {
    			           ///**************************
    			        	  //return Integer.class;
    			        	  return super.getColumnClass(columnIndex);
    			          } else {
    			               return super.getColumnClass(columnIndex);
    			          }
    			     }
     
    			    public boolean isCellEditable(int rowIndex, int columnIndex) {			   
    			        // rendre non editable la jtable          
    			    	return columnIndex >= 10;			   
    			              }
    			};
    			setModel(defaultModel);
     
     
     
    	   		jTable.setDefaultRenderer(Object.class, new CellRenderer());
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void setModel(TableModel model) {
    		jTable.setModel(model);
    		}
    Remplissage de table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (int i=0; i<nombreLignes; i++)
    					{
    						defaultModel.insertRow(defaultModel.getRowCount(), data[i]);
    				}
    data[i] sont des valeurs (peu importe)

    le 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
     
    import java.awt.Color;
    import java.awt.Component;
     
    import javax.swing.JLabel;
    import javax.swing.JTable;
    import javax.swing.table.TableCellRenderer;
     
    public class CellRenderer extends JLabel implements TableCellRenderer{
     
    	private static final long serialVersionUID = -6348693518838532834L;
     
    	public CellRenderer(){
    		super();
    		setOpaque(true);
    	}
     
    	public Component getTableCellRendererComponent(JTable jTable, Object value, 
    			boolean isSelected, boolean hasFocus, int row, int col) {			
    		System.out.println(col);
    		if (col==3)
    		{
    			setBackground(Color.magenta);
    		}
    		else
    		{
    			setBackground(Color.white);
    		}
    		return this;
    	}
    }
    Là pour l'instant, je colorie juste en magenta ma colonne 4 et les autres en blanc, mais le texte du coup disparait

    Et second probleme: je souhaite, par rapport à la valeur de la colonne 4, avoir 2 choix de couleur: bleu et rouge par exemple. Avoir donc un truc du genre:
    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
    if (col==3)
    		{
                           if (valeurcol3 < 10
                           {
    			     setBackground(Color.blue);
                           }
                           else
                           {
                                setBackground(Color.red);
                           }
    		}
    else
    		{
    			setBackground(Color.white);
    		}
    Est-ce possible et si oui, comment faire?

    D'avance, merci à ceux qui pourront m'aider

  2. #2
    Membre éclairé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Par défaut
    Rebonsoir,

    le premier probleme est resolu, il suffit d'ajouter:
    "setText(value.toString());"

    le second egalement (il vient de soi avec le premier):
    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
     
    import java.awt.Color;
    import java.awt.Component;
     
    import javax.swing.JLabel;
    import javax.swing.JTable;
    import javax.swing.table.TableCellRenderer;
     
    public class CellRenderer extends JLabel implements TableCellRenderer{
     
    	private static final long serialVersionUID = -6348693518838532834L;
     
    	public CellRenderer(){
    		super();
    		setOpaque(true);
    	}
     
    	public Component getTableCellRendererComponent(JTable jTable, Object value, 
    			boolean isSelected, boolean hasFocus, int row, int col) {				
    		/*if (hasFocus()){
    			setBackground(Color.ORANGE);
    		}
    		if (isSelected){
    			//setForeground(Color.MAGENTA);
    		}*/	
     
    		System.out.println(col + " " + value.toString());
     
    		if (col==3)
    		{
     
    			if (Integer.valueOf(value.toString())>10)
    			{
    				setText("");
    				setBackground(Color.magenta);
    			}
    			if (Integer.valueOf(value.toString())<=10)
    			{
    				setText("");
    				setBackground(Color.yellow);
    			}
    		}
    		else
    		{
    			setBackground(Color.white);
    			setText(value.toString());
    		}
    		return this;
    	}
    }
    Comme on peut le voir, la colonne dans laquelle je mets la couleur ne peut contenir que de la couleur, on cache donc la valeur

    Cela dit, le texte, je sais pas pourquoi, apprait en GRAS!!!
    Comment faire pour le mettre en normal?

    D'avance merci

Discussions similaires

  1. Colorier cellule avec la valeur la plus petite.
    Par Mehdi8793 dans le forum Excel
    Réponses: 5
    Dernier message: 24/03/2015, 14h42
  2. [XL-2010] Copier une cellule selon la valeur d'une autre cellule
    Par jérémyp8 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/08/2013, 10h27
  3. [XL-2007] changer la couleur du texte d'une cellule selon sa valeur (en vba)
    Par blackstrange dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 10/07/2012, 08h01
  4. [XL-2007] Mise en couleur d'une cellule selon la valeur d'une autre cellule
    Par young 25 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/02/2012, 12h00
  5. JTable Colorier cellules
    Par JannyBoop dans le forum Débuter
    Réponses: 2
    Dernier message: 16/02/2010, 22h14

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