JTable éditeur de couleur

jc_romeo Messages postés 59 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 13 janvier 2006 - 9 juil. 2004 à 10:42
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 - 9 juil. 2004 à 10:50
Bonjour
Je voudrais faire une JTable avec le fait que quand on clique sur une des cases on puisse changer sa couleur de fond.
j'ai donc créer la classe:

public class Donnees_matrice extends AbstractTableModel {
  protected String valeur[][];
  protected String name[];
  
  public Donnees_matrice(String val[][],String nom[]) 
  {valeur=val;
  name=nom;
  }
  
  public int getColumnCount() 
  {return valeur[0].length;
  }

  public Object getValueAt(int parm1, int parm2) 
  {return valeur[parm1][parm2];
  }

  public int getRowCount() 
  {return valeur.length;
  }

  public String getColumnName(int col)
  {return name[col];
  }
  
  public Class getColumnClass(int c) 
  {return getValueAt(0,c).getClass();
  }
  
  public void setValueAt(Object o,int parm1,int parm2)
  {valeur[parm1][parm2]=(String) o;
  }

 public boolean isCellEditable(int row, int col) 
 {return true;
 }

        

}


Puis une classe qui permet normalement de pouvoir afficher les boutons opérationnels:

public class EditeurCouleur implements TableCellEditor 
{
JColorChooser jcc = new JColorChooser();
// le bouton qui est le composant affiché pour l’édition de couleur

  // il commence par afficher le dialogue choix de couleur
  JButton b;
  // variables auxiliaires 
  JTable laTable; 
  int i, j;
  public EditeurCouleur() 
  { b=new JButton();
    b.setBackground(new Color(0,0,255,50));
  	// méthode répondant au clic sur le bouton
  	b.addActionListener(new java.awt.event.ActionListener() 
  	{public void actionPerformed(ActionEvent e) 
  		{b_actionPerformed(e);
    	}
     });
  }

// la méthode qui renvoie le composant éditeur
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,int row, int col) 
{
 laTable = table;
 i = row; 
 j = col;
 b.setHorizontalAlignment(JButton.CENTER);
 b.setText((String)value);
 b.setBackground(new Color(0,0,255,50));
 return b;
}
// méthode appelée quand le bouton est cliqué
void b_actionPerformed(ActionEvent e) 
{Color c =  jcc.showDialog(b, "choix de couleur",b.getBackground() );
 laTable.getModel().setValueAt(b.getText(), i, j);
 b.setBackground(c);

}

  public Object getCellEditorValue() 
  {return null ;
  }

  public boolean isCellEditable(EventObject anEvent) 
  { return true;
  }

  public boolean shouldSelectCell(EventObject anEvent) 
  {return true;
  }

  public boolean stopCellEditing() 
  {return true ; // pour ne pas pouvoir recommencer une édition
   //return false ; // pour pouvoir recommencer une édition
  }

  public void cancelCellEditing() {   

  }

  public void addCellEditorListener(CellEditorListener l) {   

  }

  public void removeCellEditorListener(CellEditorListener l) { 

  }

 

}



Enfin j'ai fait dans le programme principal:

Donnees_matrice mod=new Donnees_matrice(valeurs,name_colonne);
table_ligne=new JTable(mod);
//table_ligne.setDefaultRenderer(String.class,new MonAfficheurCelluleString());
for(i=0;i<nb_colonnes_affichees;i++)
{table_ligne.getColumnModel().getColumn(i).addPropertyChangeListener(this);
 table_ligne.getColumnModel().getColumn(i).setCellEditor(new EditeurCouleur());
}


Le problème est que à l'affichage je n'ai pas de couleur en background. Lorsque je clique sur une case cela marche mais si je clique sur une autre case de la colonne cela enlève la couleur de la première...????
Comment est ce que je peux faire pour que cela marche?
Merci d'avance

JC

1 réponse

wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
9 juil. 2004 à 10:50
deja t'utilise le meme bouton pour toutes tes cases c'est pas terrible...

souvient que t'utilises des objets!

le background d'un button n'est visible que si ton boutton est transparent...
0
Rejoignez-nous