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 :

CheckBox & Background dans une JTable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2009
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2009
    Messages : 72
    Par défaut CheckBox & Background dans une JTable
    Bonjour,

    j'ai ai bien lu toutes les réponses sur la façon d'afficher un checkbox pour les cellules qui ont une valeur booléenne.

    ça fonctionne bien , mais mon problème est que j'aimerais aussi changer la couleur de fond de la cellule en utilisant a priori un CellRenderer.

    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
     
    public class ColorCellRenderer extends DefaultTableCellRenderer {
        	private static final long serialVersionUID = 1L;
     
    		@Override
    		public Component getTableCellRendererComponent(JTable table,
    				Object value, boolean isSelected, boolean hasFocus, int row,
    				int column) {
     
    			super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
     
     
    			setBackground(Color.green);
     
     
    			return this;
    		}
     
        }

    mais le problème est que si j'attribue ce CellRenderer à une de mes colonnes avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table.getColumnModel().getColumn(4).setCellRenderer(new ColorCellRenderer());

    alors mon boolean est affiché en VERT mais comme un STRING et non plus comme un CHECKBOX

    comment faire cohabiter les deux modif.

    merci

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Il faut que tu appliques le setBackground sur le composant renvoyé par l'appel à super.getTableCellRendererComponent puis renvoyer ce composant au lieu de this.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2009
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2009
    Messages : 72
    Par défaut
    merci beaucoup Sinok

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2009
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2009
    Messages : 72
    Par défaut
    j ai répondu un peu trop vite car je viens d'essayer et malgré que je retourne le composant et non pas this. la cellule qui contient le checkbox affiche maintenant un string et non plus la checkbox .

    je formate ma table en faisait appele a cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private void formatTable(JTable table){
    		for (int i = 0; i < table.getColumnCount(); i++) {		      
    			TableColumn col = table.getColumnModel().getColumn(i);
    		      //set the renderer to myHeaderRenderer
    		      col.setHeaderRenderer(new MyHeaderRenderer());
    		      col.setCellRenderer(new MyCellRenderer());
    		      col.setPreferredWidth(60);
    		}
    	}
    et voila mon 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
    private class MyCellRenderer extends DefaultTableCellRenderer {
     
    		private static final long serialVersionUID = 1L;
     
    		@Override
    		public Component getTableCellRendererComponent(JTable table,
    				Object value, boolean isSelected, boolean hasFocus, int row,
    				int column) {
     
    			Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
     
    			if (column == 0) {
    				comp.setBackground(ISColor.cLightGrey);
    			}
    			else 
    				comp.setBackground(ISColor.cBlue);
     
    			return comp;
    		}
    	}
    est ce que tu vois d'ou vient le probleme ????

  5. #5
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Le modèle de ta table renvoie-t'il bien Boolean.class dans sa méthode getCOlumnClass pou cette colonne?

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2009
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2009
    Messages : 72
    Par défaut
    en fait j 'avais posé une question dans mon post précédent ou j'avais un problème avec mon modèle de table et on m'a dit de faire un extends de AbstractTableModel plutot que de Default...

    j'ai donc du faire ce que tu viens de dire car il n'y a que le DefaultTableModel qui prend d'office en charge le type des colones.

    voici à quoi ressemble mon model :


    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    private class MyUnitsextSheetTableModel extends AbstractTableModel {
     
    	private static final long serialVersionUID = 1L;
    	private List<UnitsextSheets> sheets;
    	private ArrayList<String> headers;
     
    	public MyUnitsextSheetTableModel(List result, ArrayList<String> headers){
    		this.sheets = (List<UnitsextSheets>) result;
    		this.headers = headers;
    	}
     
            public Class getColumnClass(int column) {
    		switch (column) {
                	case 0:
                		return Boolean.class;
                	case 3:
                	case 4:
                		return String.class;  	
                    default:
                        return Integer.class;
    			}
    		}
     
            public int getRowCount() {
            	return sheets.size();
            }
     
            public int getColumnCount() {
            	return headers.size();
            }
     
            public String getColumnName(int colIndex){
            	return headers.get(colIndex);
            }
     
            public Object getValueAt(int rowIndex, int colIndex){
            	switch (colIndex) {
            		case 0:
            			return sheets.get(rowIndex).getImported();
            		case 1:
            			return sheets.get(rowIndex).getId().getSheetnb().intValue();
            		case 2:
            			return sheets.get(rowIndex).getFormat();
            		case 3:
            			return sheets.get(rowIndex).getStartcell();
            		case 4: 
            			return sheets.get(rowIndex).getEndcell();
            		case 5: 
            			return sheets.get(rowIndex).getDmodel();
            		case 6:
            			return sheets.get(rowIndex).getDmodelid();
            		case 7: 
            			return sheets.get(rowIndex).getDfirstctry();
            		case 8: 
            			return sheets.get(rowIndex).getDfirstrow();
            		case 9:
            			return sheets.get(rowIndex).getDunits();	
            		default:
            			return null;
     
            	}
            }
     
            public boolean isCellEditable(int rowIndex, int mColIndex) {
    		    return true;
    		}
     
    	}

    ce qui est bizarre c'est que dans ma cellule , le text s'affiche comme ca : "false"
    mais que des que je clique dessus , alors le checkbox apparait, je comprend bien qu'il doit y avoir un renderer qui gere
    différement la cellule "CKICKED". mais alors comment règler ce problème, je n'en ai aucune idée

Discussions similaires

  1. Mettre un checkbox dans une jtable
    Par ayezinehayeme dans le forum Composants
    Réponses: 1
    Dernier message: 29/04/2014, 08h18
  2. Checkbox dans une JTable
    Par Tobear91 dans le forum Composants
    Réponses: 9
    Dernier message: 05/04/2011, 13h16
  3. Réponses: 3
    Dernier message: 25/03/2011, 18h29
  4. mettre un checkbox dans une jtable
    Par christianf dans le forum Composants
    Réponses: 9
    Dernier message: 20/11/2010, 18h52
  5. [JTable] couleur de sélection dans une JTable
    Par spoutyoyo dans le forum Composants
    Réponses: 7
    Dernier message: 06/12/2004, 11h43

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