Mettre en couleur la cellule selectionnee d'une JTable
kobee12
Messages postés153Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention31 octobre 2006
-
1 mars 2004 à 19:58
kobee12
Messages postés153Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention31 octobre 2006
-
3 août 2005 à 15:53
Salut a tous.
J'aimerais pouvoir mettre en couleur la cellule que je selectionne en cliquant(par exemple le contour de la cellule en rouge).
Je n'arrive qu'a mettre toute la ligne en couleur et pas juste une cellule.
Ca serait cool que quelqu'un puisse m'aider
:big)
kobee12
Messages postés153Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention31 octobre 20061 3 août 2005 à 14:05
Tu définit d'abord un modele de table
Ex :
DefaultTableModel df = new DefaultTableModel() {
public boolean isCellEditable(int row, int col) {
return false;
}
};
tu définis le model pour ta table :
jTable.setModel(df);
tu peux définir le rendu des en-têtes :
TableCellRenderer tbcH = createHeaderRenderer();
tu définis le nombre de colonnes auxquelles tu appliques le rendu des cellules et des en-têtes :
for (int i = 0; i < nbCol; i++) {
TableColumn tc = jTable.getTableHeader().getColumnModel().getColumn(i);
tc.setHeaderRenderer(tbcH);
tc.setCellRenderer(new DemoCellRenderer());
}
// Exemple de definitions des en-têtes
private TableCellRenderer createHeaderRenderer() {
DefaultTableCellRenderer label = new
DefaultTableCellRenderer() {
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
JTextArea lbl = new JTextArea() {
// methode a redefinir pour modifier l aspect de la cellule
public void paint(Graphics g) {
super.paint(g);
}
};
// Donne une couleur pour chaque en-tête selon initcolors()
Color back = (Color) couleur.get(getText());
//Couleur de fond des en-têtes. Si==null->couleur par defaut
lbl.setBackground( (back == null) ? defoBack : back);
//Couleur du texte des en-têtes
lbl.setForeground(foreColor);
Font font = table.getFont();
lbl.setOpaque(true);
font = new Font(font.getName(), Font.BOLD, font.getSize());
lbl.setFont(font);
lbl.setBorder(UIManager.getBorder("TableHeader.cellBorder"));
lbl.setText( (String) value);
return lbl;
}
};
label.setHorizontalAlignment(JLabel.CENTER);
return label;
}
Tu rajoutes la fonction getTableCellRendererComponent() avec tout ce qu'il y a au dessus dans une classe et tu fais appel à cette classe.
c1rd3c
Messages postés15Date d'inscriptionlundi 20 juin 2005StatutMembreDernière intervention21 avril 2008 3 août 2005 à 14:35
Je resume pour voir si j'ai bien compris :
- J'ai donc créer une classe "PlateTemplateModel" avec les fonctions
que tu m'as donné (est ce que cette classe doit implémenter qqch?).
Deja la, le problème, c'est que ma classe ne connait pas par exemple
selectedForeground (dans getTableCellRendererComponent),
selectedBackground, unselectedForegroundAlt ou setFont, ...
- Il faut dc ensuite que je créer une classe qui va faire appel a "PlateTemplateModel". Tout le reste va se faire tt seul?
Vous n’avez pas trouvé la réponse que vous recherchez ?
kobee12
Messages postés153Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention31 octobre 20061 3 août 2005 à 15:53
Va voir cette source, elle m'a bien aidé pour les tables.
http://www.javafr.com/code.aspx?id=20197 Tu réadaptes les fonctions que je t'ai donné dans la classe de l'exemple et ensuite tu fais appel a cette classe du style :
FrmTable table = new FrmTable();
jScrollPane1.getViewport().add(table.jTable);
Mets bien la table dans un jscrollPane parce que je crois que sinon ca ne fonctionne pas.