Probleme colorer celule et colone selectionné JTable

Signaler
Messages postés
211
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
15 mars 2013
-
Messages postés
211
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
15 mars 2013
-
bonjour,
dans mon JTable , je veux que lorsque je clique sur une cellule : seul la cellule qui se colore pas toute la ligne se colore d'une autre couleur que je preciserai (et dans un autre cas sa ligne et sa colonne), mais toute la ligne se colore par defaut lorsque une de ses cellules sont selectionnés mais la colonne non alors j'ai essayé mais pas de resultat
voila mon code de la classe qui implemente TableCellRenderer:
public Component getTableCellRendererComponent(JTable table, Object value, 
boolean isSelected, boolean hasFocus, int row, int column) {
Component c = support.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if(alternerLignes){
miseEnFormeAlternee((JLabel)c, isSelected, row);
}
else {
miseEnFormeStandard((JLabel)c, isSelected);	
}
if(row==0 || column==0 ){
c.setBackground(Color.blue);
} 
if(isSelected){
//System.out.println("c : "+value);
c.setBackground(Color.RED);

}
return c;
}

8 réponses

Messages postés
211
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
15 mars 2013
8
merci d'avance
Messages postés
211
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
15 mars 2013
8
pour eclaircir le probleme je veux que seul la cellule selectionné qui soit coloré
pour distinguer bien sa colonne et sa ligne
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
363
Bonjour,

Je crois reconnaitre ce code non ?

Attend une seconde, je te fais ca.
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
363
Voilà :

import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;
import javax.swing.JTable;


public class Main {

/**
 * @param args
 */
public static void main(String[] args) {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JTable table = new JTable(new Object[][]{{"11", "12", "13"},{"21", "22", "23"},{"31", "32", "33"}}, new Object[]{"colonne1", "colonne2"});
table.setDefaultRenderer(Object.class, new TableRenderer());
f.add(table);
table.addMouseMotionListener(new MouseMotionListener() {

public void mouseMoved(MouseEvent arg0) {
Point p = arg0.getPoint();

int x = table.rowAtPoint(p);
int y = table.columnAtPoint(p);

table.getSelectionModel().setSelectionInterval(x,x);
table.setColumnSelectionInterval(y,y);

}

public void mouseDragged(MouseEvent arg0) {
// TODO Auto-generated method stub

}
});
table.addMouseListener(new MouseListener() {

public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub

}

public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub

}

public void mouseExited(MouseEvent arg0) {
table.clearSelection();

}

public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub

}

public void mouseClicked(MouseEvent arg0) {


}
});
f.setSize(200, 200);
f.setLocationRelativeTo(null);
f.setVisible(true);

}

}

Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
363
J'ai oublié la classe TableRenderer :

import java.awt.Color;
import java.awt.Component;

import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;


public class TableRenderer implements TableCellRenderer {

private DefaultTableCellRenderer support = new DefaultTableCellRenderer();

public Component getTableCellRendererComponent(JTable table, Object value, 
boolean isSelected, boolean hasFocus, int row, int column) {
Component c = support.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if(hasFocus){
c.setBackground(Color.RED);
}
else{
c.setBackground(Color.WHITE);
}
return c;
}

}

Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
363
Tu pourras modifier cette classe comme tu veux pour avoir le rendu que tu souhaites.

Remarques que la cellule colorisée est celle pour laquelle hasfocus est à true.
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
363
Pas de réaction ?
Messages postés
211
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
15 mars 2013
8
merci pour le code
j'ai trouvé une autre solution pour maitenir la selection sur tous les cellules qu'on veut juste avec :
maTable.setColumnSelectionAllowed(true);
maTable.setRowSelectionAllowed(true);