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 :

Problème Sélection Cellules JTable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Par défaut Problème Sélection Cellules JTable
    Bonjour,

    Alors voici mon problème :

    Mon interface dispose entre autres d'une JTable et d'un JButton. Lorsque je clique sur mon bouton je modifie la couleur ( par exemple rouge ) d'une cellule de la ligne 8,colonne 1 comme je le souhaite.
    Par contre si après je clique sur une autre cellule de la même colonne, toute les cellules de cette colonne prennent la couleur rouge.

    Le code est le suivant :
    Classe appelante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     table.getColumnModel().getColumn(1).setCellRenderer(new  ColorCellRenderer(table,getModel(),essai,boxcouleur.getSelectedItem().toString(),Integer.parseInt(boxposition.getSelectedItem().toString()),8));
    Classe ColorCellRenderer :

    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
    public ColorCellRenderer(JTable table,ModelTable model,int essai,  String couleur, int column, int row){
     
    if(model != null){ this.model = model; }
     
    this.row = row; this.column = column; this.essai = essai;
    color = getcouleur(couleur);
    getTableCellRendererComponent(table,null,false,false,this.row,this.column);
     
    }
     
     
    @Override
    public Component getTableCellRendererComponent(JTable table, Object  value, boolean isSelected, boolean hasFocus, int row, int column) {
     
    setBackground(null);
     
     
    super.getTableCellRendererComponent(table, value, isSelected, hasFocus,  row, column);
     
    if ((color!=null) && model.isCellEditable(this.row,  this.column)){
     
    setBackground(color);
    model.fireTableCellUpdated(this.row,this.column);
    }else{
    //TODO
    }
    return this;
    }
    classe ModelTable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex){
     
    if (rowIndex==8){
    return true;
    }else{
    return false;
    }
    }
    Quelle pourrait-être la solution ??

    Je pensais à travailler sur la méthode isCellEditable ou à rendre les clics de souris sur la JTable sans effet.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Par défaut
    Finalement j'ai trouvé d'où venait le problème, et c'est juste dû à un mauvais codage de ma part dans la classe ColorCellRenderer!

    Citation Envoyé par darling Voir le message

    Classe ColorCellRenderer :

    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
    public ColorCellRenderer(JTable table,ModelTable model,int essai, String couleur, int column, int row){
    
    if(model != null){ this.model = model; }
    
    this.row = row; this.column = column; this.essai = essai;
    color = getcouleur(couleur);
    getTableCellRendererComponent(table,null,false,false,this.row,this.column);
    
    }
    
    
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    
    setBackground(null);
    
    
    super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
    
    if ((color!=null) && model.isCellEditable(this.row, this.column)){
    
    setBackground(color);
    model.fireTableCellUpdated(this.row,this.column);
    }else{
    //TODO
    }
    return this;
    }
    Le problème venait des variables de lignes et colonnes. Voici le code de la classe corrigé :

    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
    public class ColorCellRenderer extends DefaultTableCellRenderer {
    	
    	private static final long serialVersionUID = 1L;
    	Color color = null ;
    	ModelTable model;
    	int essai;
    	
    	public ColorCellRenderer(JTable table,ModelTable model,int essai, String couleur, int column, int row){
    		
    		if(model != null){ 
    			this.model = model;
    			this.essai = essai;
    			color = getcouleur(couleur);
    			getTableCellRendererComponent(table,null,false,false,row,column);
    		}else{
    			//TODO
    		}		
    	}
    
    	public Color getcouleur(String couleur){
    	
    		if (couleur.equals("Rouge")){
    			color = Color.RED;
    		}
    		else if (couleur.equals("Orange")){
    			color = Color.ORANGE;
    		}
    		else if (couleur.equals("Jaune")){
    			color = Color.YELLOW;
    		}
    		else if (couleur.equals("Vert")){
    			color = Color.GREEN;
    		}
    		else if (couleur.equals("Bleu")){
    			color = Color.BLUE;
    		}
    		else if (couleur.equals("Rose")){
    			color = Color.PINK;
    		}
    		else{
    			color = Color.WHITE;
    		}
    		return color;
    	}
    	
    	@Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
           
    		setBackground(null); 
    		
    		super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
    		
    		if ((color!=null) && model.isCellEditable(row,column,this.essai)){ 
    			
    			setBackground(color);
    			model.fireTableCellUpdated(row,column);			
    		}else{ 
    			//TODO
    		}
            return this;
    	}
    }
    Je mets aussi le code de ma méthode IsCellEditable() car elle peut, peut-être, intéresser. Dans celle-ci, suivant la valeur d'une variable, je fait varier les lignes éditables de 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
    public boolean isCellEditable(int rowIndex, int columnIndex, int essai){
     
        	switch(essai){
        	case 0 : if (rowIndex==8) return true;
        				else return false; 
        	case 1 : if (rowIndex==8 || rowIndex==7) return true;
        				else return false ;
        	case 2 :if (rowIndex==8 || rowIndex==6) return true;
    					else return false ;
        	case 3 :if (rowIndex==8 || rowIndex==5) return true;
    					else return false ;
        	case 4 :if (rowIndex==8 || rowIndex==4) return true;
    					else return false ;
        	case 5 :if (rowIndex==8 || rowIndex==3) return true;
    					else return false ;
        	case 6 :if (rowIndex==8 || rowIndex==2) return true;
    					else return false ;
        	case 7 :if (rowIndex==8 || rowIndex==1) return true;
    					else return false ;
        	case 8 :if (rowIndex==8 || rowIndex==0) return true;
    					else return false ;
        	default : return false;
        	}
     
        }

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

Discussions similaires

  1. Problème sélection plage de cellules
    Par Kestion100 dans le forum Excel
    Réponses: 1
    Dernier message: 12/02/2014, 12h44
  2. Problème édition cellule d'un JTable
    Par Poum19 dans le forum Composants
    Réponses: 2
    Dernier message: 16/04/2012, 16h23
  3. [Toutes versions] Problème sélection de plusieur cellule dans un Spreadsheet situer dans une Userform
    Par mentat dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 06/05/2010, 11h57
  4. problème de syntaxe sélection cellule et formule
    Par babou466 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/02/2009, 13h11
  5. [JTable] problème sélection / event
    Par Méta dans le forum Composants
    Réponses: 10
    Dernier message: 26/09/2007, 22h08

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