JTable, souci de séléction après avoir ajouter un CellRenderer
Voila, au départ, si je cliquais sur une ligne, toutes la ligne se mettait en surbrillance (meme toutes les lignes séléctionné).
J'ai rajouté un CellRenderer pour changer les couleurs et la font de certaine ligne en fonction des actions de l'utilisateur.
Mais maintenant, en cliquant sur une ligne, seul la cellule est selectionnée, pas de surbrillance ou autre. De plus, même après avoir effectué un
tableModalite.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
je ne peux pas selectionner plusieurs ligne/case à la fois.
Je définis le renderer de ma table, et le mode de selection de la sorte
Code:
1 2 3
|
tableModalite.setDefaultRenderer(Object.class,new MonCellRenderer(question));
tableModalite.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); |
Et voici mon MonCellRenderer
Code:
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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| package ihm;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.text.Style;
import noyau.Individus;
import noyau.Modalite;
import noyau.Question;
import noyau.Questionnaire;
public class MonCellRenderer extends DefaultTableCellRenderer
{
Questionnaire questionnaire;
Individus individus;
Question question;
/**
* Constructeur pour les tableaux de la fenetre FPragma
* @param cQuestionnaire
*/
public MonCellRenderer(Questionnaire cQuestionnaire)
{
super();
questionnaire=cQuestionnaire;
}
/**
* Constructeur pour le tableau de la fenetre FSaisieQuestion en mode saisie réponse
* @param cQuestionnaire
* @param cIndividus
*/
public MonCellRenderer (Question cQuestion, Individus cIndividus)
{
super();
question=cQuestion;
individus=cIndividus;
}
/**
* Constructeur pour le tableau de la fenetre FSaisieQuestion en mode création questionnaire
* @param cQuestion
*/
public MonCellRenderer(Question cQuestion)
{
super();
question=cQuestion;
}
public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column)
{
Component comp = super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);
String str= (String)table.getValueAt(row, 1);
int rang = Integer.parseInt(str);
//On affiche une ligne sur deux en gris leger pour bien aider la distinction.
if(row%2==0)
super.setBackground(Color.white);
else
super.setBackground(new Color(221,221,221));
//Si la ligne est selectionné par l'utilisateur, on la souligne
super.setFont(new Font("Serif",Font.BOLD,14));
if(question!=null)
{
for(int i =0; i<question.getListeModalite().size(); i++)
{
Modalite m = (Modalite)question.getListeModalite().get(i);
if(m.isSelectionee())
super.setForeground(new Color(126, 178,0));
else
super.setForeground(new Color(216,11, 41));
}
}
return comp;
}
} |
De plus, j'ai un autre souci. J'ai un listener pour le clic droit sur ma jtable, qui ouvre un menu et dont les actions se font sur les lignes selectionnée. (enfin ca c'était quand mes lignes pouvaient l'être mais bon^^)
Or, le clic droit ne selectionne pas la ligne, ce qui dans certain cas, pose soucis. Je pensais donc au moment d'effectuer un clic droit simuler un clic gauche avant (avec certaine restriction, notament si plusieurs lignes ont déjà été séléctionnée) mais comment se déroule l'action du clic gauche sur une JTable ? Et, est ce qu'il ya une solution plus interessante ?
Enfin une dernière question, pas vraiment de la programmation, mais bon je veux donc que l'on puisse selectionné plusieurs lignes à la fois, mais que toute la ligne soit selectionnée à chaque fois. Mais je voudrais également pouvoir séléctionné plusieurs cellule à la fois. Tout les clic sont déjà utilisé, le ctrl Clic addition les lignes, le shift aussi. Je me demandais dons si le alt pouvait être interesant, ou ca serait déroutant pour l'utilisateur ?
Voila voila ^^