Mettre en couleur la cellule selectionnee d'une JTable

kobee12 Messages postés 153 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 31 octobre 2006 - 1 mars 2004 à 19:58
kobee12 Messages postés 153 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 31 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)

5 réponses

kobee12 Messages postés 153 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 31 octobre 2006 1
1 mars 2004 à 21:16
Finalement j'ai trouve la reponse a mon pb.
Je met le code pour ceux a qui ca interesserait
Voici ma classe du rendu de mes cellules :

public Component getTableCellRendererComponent(
JTable table, Object val,
boolean isSelected, boolean hasFocus,
int row, int column)
{
setAlignmentX( CENTER_ALIGNMENT );

// s'assure du style de la font
Font f = getFont();
// on met une font differente pour la ligne selectionnee...
if ( isSelected)
{
setFont( new Font( f.getName(), Font.PLAIN|Font.ITALIC, f.getSize() ) );
// gestion des couleur de selection
super.setForeground( ( selectedForeground != null) ? selectedForeground : table.getSelectionForeground() );
super.setBackground( ( selectedBackground != null) ? selectedBackground : table.getSelectionBackground() );
}
// ...et les autres lignes
else
{
setFont( new Font( f.getName(), Font.PLAIN, f.getSize() ) );
if ( ((column)>>1)<<1 == column - (row-((row>>1)<<1)) )
{
super.setForeground( ( unselectedForegroundAlt != null) ? unselectedForegroundAlt : table.getForeground() );
super.setBackground( ( unselectedBackgroundAlt != null) ? unselectedBackgroundAlt : table.getBackground() );
}
else
{
super.setForeground( ( unselectedForeground != null) ? unselectedForeground : table.getForeground() );
super.setBackground( ( unselectedBackground != null) ? unselectedBackground : table.getBackground() );
}
}
// On met dans une autre font la cellule selectionnee
if( isSelected && column==table.getSelectedColumn())
{
setFont( new Font( f.getName(), Font.PLAIN|Font.BOLD|Font.ITALIC, f.getSize() ) );
// gestion des couleur de selection
super.setForeground( ( selectedForeground != null) ? selectedForeground : table.getSelectionForeground() );
super.setBackground( new java.awt.Color(100,190,240) ); // bleu-vert
}
setText( val.toString() );
return this;
}
}

Voila, finalement c'etait plutot simple, fallait juste y penser
:big)
1
c1rd3c Messages postés 15 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 21 avril 2008
3 août 2005 à 12:23
Coucou,



Je suis nouveau pour ce qui est d JTable. Je dois faire la meme chose
pour mon aplication. Je dois changer la couleur d'une case, qd je
clique dessus.

Maintenant, je ne vois pas comment utiliser le code source ci-dessus? Est ce qqn pourrait m'aider?



Merci.

Cirdec.
0
kobee12 Messages postés 153 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 31 octobre 2006 1
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.

J'espère que j'ai été clair.

@+ Kobee12
0
c1rd3c Messages postés 15 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 21 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?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kobee12 Messages postés 153 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 31 octobre 2006 1
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.
0
Rejoignez-nous