JCheckBox dans une JTable??

Signaler
Messages postés
78
Date d'inscription
lundi 27 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2015
-
Messages postés
78
Date d'inscription
lundi 27 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2015
-
Salut mes vous autres...

Je suis présentement entraint de faire une JTable avec un JCheckBox dans la dernière colonne afin de cocher si le produit est compatible ou non ( cochez = compatible ). J'ai un JCheckBoxEditor ce qui fait que ma colonne se cré avec mes checkbox mais le problème est que si je coche une case et que je veux cocher ailleur eh bien la dernière case se met par défaut comme si elle n'avait jamais été coché. Autre problème : Je n'arrive pas a savoir si la case a, par exemple la ligne 3, est coché ou non. Si vous avez un Editeur plus simple a me proposer GO je suis ouvert...

Merci mes vous autres :)    

2 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
104
Il te faut mettre à jour la valeur de ta table lorsque le checkbox est coché, car l'editor de ta case du JTable ne le fait pas automatiquement (cf ma source sur les cellrenderer/celleditor par exemple).
Messages postés
78
Date d'inscription
lundi 27 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2015

J'envoie ici mon code source pour mon editor :

--- EDITOR ---

package

cb.utils;

import

java.awt.Color;
import

java.awt.Component;

import

javax.swing.AbstractCellEditor;
import

javax.swing.JCheckBox;
import

javax.swing.JTable;
import

javax.swing.SwingConstants;
import

javax.swing.table.TableCellEditor;

public

class JCheckBoxCellEditor
extends AbstractCellEditor
implements TableCellEditor {

protected JCheckBox
checkBox;

public JCheckBoxCellEditor() {

checkBox =
new JCheckBox();

checkBox.setHorizontalAlignment(SwingConstants.
CENTER );

checkBox.setBackground( Color.
black);}

public Component getTableCellEditorComponent(JTable table,

Object value,

boolean isSelected,

int row,

int column) {

checkBox.setSelected(((Boolean) value).booleanValue());

Component c = table.getDefaultRenderer(String.

class).getTableCellRendererComponent(table, value, isSelected,
false, row, column);

if (c !=
null ) {

checkBox.setBackground(c.getBackground());}

return
checkBox;}

public Object getCellEditorValue(){

return Boolean. valueOf (
checkBox.isSelected());}

}

----------------

et la partie de ma Vue ou je cré mon modèle de table

---MODELE DE TABLE CREATION---

private TableModeleCompatible getTable(
int i){

Hashtable composants = PComputerBuilder.getInstance().getComposants(i);

Object[] colonne = {

"NOM",
"COMPAGNIE",
"DESCRIPTION",

"OID",
"COMPATIBLE"};Object[][] data =

new Object[composants.size()][5];

//TableModeleCompatible table = new TableModeleCompatible(colonne, composants);
int j 0;Enumeration enu composants.elements();

while (enu.hasMoreElements()){

Composant c = (Composant)enu.nextElement();

Integer pr =

new Integer(c.getOid());
boolean b <gras>true;data[j][0]</gras> c.getNom();

data[j][1] = c.getCompagnie();

data[j][2] = c.getDescription();

data[j][3] = pr.toString();

data[j][4] =

new Boolean(b);j++;

}

TableModeleCompatible table =

new TableModeleCompatible(colonne, data);

return table;}

--------------------------------------------

Ma table modèle :

--- Modele de Table ---

package

cb.utils;

import

javax.swing.table.AbstractTableModel;

public

class TableModeleCompatible
extends AbstractTableModel {

private Object[]
nomColonnes;

private Object[][]
data;

public TableModeleCompatible(Object[] nomColonnes, Object[][] data){

this.
nomColonnes = nomColonnes;

this .
data = data;}

public String getColumnName(
int col){

return
nomColonnes[col].toString();}

public Class getColumnClass(
int columnIndex) {

return
data[0][columnIndex].getClass();}

public
int getColumnCount(){

return
nomColonnes.
length;}

public
int getRowCount() {

return
data.
length;}

public
boolean isCellEditable(
int row,
int column) {

return (column = = 4); }

public Object getValueAt(
int rowIndex,
int columnIndex){

return
data[rowIndex][columnIndex];}

}

-------------------------

et puis un bout de ma vue qui va chercher ma méthode pour créer mon modèle de table

-------------------

private JPanel getMemoire(){

JPanel jp =

new JPanel();

TableModeleCompatible tmc = getTable(Composant.

Memoire );

jtmem =
new JTable(tmc);

jtmem.setPreferredScrollableViewportSize(
new Dimension(475, 75));

jtmem.getColumnModel().getColumn(4).setCellEditor(
new JCheckBoxCellEditor());

jtmem.setFocusable(
false);

JScrollPane js =

new JScrollPane(
jtmem);

jtmem.setAutoscrolls(
true);

jtmem.setSelectionMode(ListSelectionModel.
SINGLE_SELECTION);

jtmem.setAutoCreateRowSorter(
true);

jp.add(

new JLabel(
"MÉMOIRE : "));jp.add(js);

return jp;}

-------------------

En espérant que ca vous aidez a m'aider.