[JTable] Problème de CellEditor de CheckBox
Bonjour à vous Développeurs!
Je suis en train de faire un projet en Java et je me trouve confronté à un problème que je ne maîtrise pas.
J'ai créer une JTable contenant du texte récupéré d'un base de données. Au deux dernières colonnes, j'y ai ajouté des Checkbox. J'ai compris le concept de CellRenderer et CellEditor mais malheureusment, lorsque je clique sur une checkbox, le petit v aparait spontanément et disparait de suite. Voici ci-bas le code que j'ai produit :
///L'éditeur de la checkBox
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
| public class KCheckBoxEditor extends JCheckBox {
KCheckBoxEditor( ){
this.setHorizontalAlignment(SwingConstants.CENTER);
this.setBackground(Color.green);
this.addActionListener(action);
}
private ActionListener action = new AbstractAction(""){
public void actionPerformed(ActionEvent evt){
JCheckBox cb = (JCheckBox)evt.getSource();
boolean isSel = cb.isSelected();
if(isSel){System.out.print("Cliked");}else{System.out.print("UnCliked");}
}
};
public Component getTableCellEditorComponent(JTable table, Object value, boolean selected, boolean hasFocus, int row, int column){
return this;
}
} |
//La classe qui définit le rendu de chaque colonne
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
| class MyJTableUserTasks extends JTable{
/**
* locks the cells
*/
public boolean isCellEditable(int row, int column){
return (column == 7) || (column == 8);
}
/**
* The constructor - Initialize the JTable of the user processes-tasks
*/
public MyJTableUserTasks(){
super();
setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
setRowHeight(30);
setRowMargin(5);
setFont(new Font("Arial",Font.PLAIN,12));
getTableHeader().setReorderingAllowed(false);
getTableHeader().setCursor(new Cursor(Cursor.HAND_CURSOR));
setCursor(new Cursor(Cursor.HAND_CURSOR));
addMouseMotionListener(selectedRow);
addMouseListener(selectedRow);
setShowGrid(false);
}
private MouseInputListener selectedRow = new MouseInputAdapter(){
public void mouseExited(MouseEvent e){
clearSelection();
}
public void mouseMoved(MouseEvent e){
int p = rowAtPoint(new Point((int)e.getX(),(int)e.getY()));
setRowSelectionInterval(p,p);
}
};
/**
* The type of the columns
*/
public void setColor(){
for (int i=0;i<getColumnCount();i++){
getColumnModel().getColumn(i).setCellRenderer(new KTableCellRenderer());
if(i == 7){getColumnModel().getColumn(i).setCellRenderer(new KCheckBoxRenderer());}
if(i == 7){getColumnModel().getColumn(i).setCellEditor(new DefaultCellEditor( new KCheckBoxEditor() ) );}
if(i == 8){getColumnModel().getColumn(i).setCellRenderer(new KCheckBoxRenderer());}
if(i == 8){getColumnModel().getColumn(i).setCellEditor(new DefaultCellEditor( new KCheckBoxEditor() ) );}
}
}
} |
D'après ce qu'on m'as dit , il faut que mon éditeur change le modèle car il le Renderer écrase mon Editeur... hors je ne m'en sors pas. Quelqu'un arriverait à éclaire mon chemin ??
En vous remerciant d'avance:)
Henrique Marques
Etudiant en informatique de gestion