Problema para contar checkbox en JTable! Help!!
Publicado por Mavip (2 intervenciones) el 21/09/2016 17:55:54
Necesito ayuda!!!! Tengo un Jtable con datos de una BD de mysql, a este Jtable le inserte jcheckbox... la idea es que cada que vaya seleccionando un checkbox me vaya imprimiendo el valor seleccionado y me lo vaya acumulando.
El problema es que al seleccionar el checkbox no me imprime el valor hasta que selecciono el siguiente
Por ejemplo, de la siguiente calumna de datos:
A
B
C
D
al seleccionar A, me debe imprmir la letra A, pero no es hasta que hago la segunda seleccion de checkbox que me imprime la A, y al seleccionar el tercer checkbox me imprime la segunda letra.
Ya intente moviendo los valores del for, pero no he podido solucionarlo, a continuacion anexo el código de la clase que genera la tabla y las que le dan el formato a los checkbox, espero me puedan ayudar a enocntrar el error:
Este es el código donde genero las Jtables con sus checkbox
Y está la clase Celda_CheckBox:
Y la clase Render_CheckBox:
Ojala alguien pueda ayudarme, de verdad es algo urgente :S
de antemano Gracias!
El problema es que al seleccionar el checkbox no me imprime el valor hasta que selecciono el siguiente
Por ejemplo, de la siguiente calumna de datos:
A
B
C
D
al seleccionar A, me debe imprmir la letra A, pero no es hasta que hago la segunda seleccion de checkbox que me imprime la A, y al seleccionar el tercer checkbox me imprime la segunda letra.
Ya intente moviendo los valores del for, pero no he podido solucionarlo, a continuacion anexo el código de la clase que genera la tabla y las que le dan el formato a los checkbox, espero me puedan ayudar a enocntrar el error:
Este es el código donde genero las Jtables con sus checkbox
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
Object rowData2[][] = {{"Row1-Column1","Row1-Column2"}};
Object columnNames2[] = {"","Empalmes"};
DefaultTableModel mTableModel2 = new DefaultTableModel(rowData2, columnNames2);
try {
java.sql.Connection con = DriverManager.getConnection (url, usr, pass);
java.sql.Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery ("SELECT * FROM details_gsdm "
+ "WHERE details_gsdm.codigo LIKE '%"+codigo+"%' AND details_gsdm.np <>'' AND details_gsdm.C18 <> 'BUILD CAT' AND details_gsdm.c17 ='FA EQUIP' AND (details_gsdm.c18 ='1145' OR details_gsdm.c18 ='1005' OR details_gsdm.c18 ='1025' OR details_gsdm.c18 ='1020')"
+ "GROUP BY C6;");
Object[] rows;
while (rs.next()) {
rows = new Object[]{false,rs.getString(6)}; //PARA CHECBOX
mTableModel2.addRow(rows);
}
rs.close();
stmt.close();
con.close();
} catch (SQLException e) {
//JOptionPane.showMessageDialog(null,"checalo bien "+e);
}
final JTable t2 = new JTable (mTableModel2);
t2.setModel(mTableModel2);
//PARA CHECKBOX
//Se crea el JCheckBox en la columna indicada en getColumn, en este caso, la primera columna
t2.getColumnModel().getColumn( 0 ).setCellEditor( new Celda_CheckBox() );
//para pintar la columna con el CheckBox en la tabla, en este caso, la primera columna
t2.getColumnModel().getColumn( 0 ).setCellRenderer(new Render_CheckBox());
t2.setCellSelectionEnabled(true);
t2.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
//Establece el ancho de las columnas
t2.getColumnModel().getColumn(0).setPreferredWidth(23);
t2.getColumnModel().getColumn(1).setPreferredWidth(72);
//Centra el texto de la segunda columna
DefaultTableCellRenderer tcr = new DefaultTableCellRenderer();
tcr.setHorizontalAlignment(SwingConstants.CENTER);
t2.getColumnModel().getColumn(1).setCellRenderer(tcr);
sp = new JScrollPane(t2);
sp.setBounds(25, 120, 113, 135);
sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
p1.add(sp);
mTableModel2.removeRow(0);
t2.getModel().addTableModelListener((TableModelEvent e) -> {
String acumulador="";
String circuito;
for( int i=0 ; i<mTableModel2.getRowCount() ; i++)
{
circuito="details_gsdm.C6 = '"+(String)mTableModel2.getValueAt(i, 1)+"' OR ";
if ( mTableModel2.getValueAt(i, 0).equals(true)) {
try{
acumulador=acumulador+circuito;
}
catch (NumberFormatException nfe){ //si existe un error se coloca 0 a la celda
JOptionPane.showMessageDialog(null,"Error: El orden de las columnas es incorrecto "+nfe);
}
}//if
}//for
String nuevoAcumulado = acumulador.substring(0,acumulador.length()-3);
// JOptionPane.showMessageDialog(null,nuevoAcumulado);
l6.setText(nuevoAcumulado);
});
Y está la clase Celda_CheckBox:
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
public class Celda_CheckBox extends DefaultCellEditor implements TableCellRenderer {
private JComponent component = new JCheckBox();
private boolean value = false; // valor de la celda
/** Constructor de clase */
public Celda_CheckBox() {
super( new JCheckBox() );
}
/** retorna valor de celda */
@Override
public Object getCellEditorValue() {
return ((JCheckBox)component).isSelected();
}
/** Segun el valor de la celda selecciona/deseleciona el JCheckBox */
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
//obtiene valor de celda y coloca en el JCheckBox
boolean b = ((Boolean) value).booleanValue();
( (JCheckBox) component).setSelected( b );
return ( (JCheckBox) component);
}
/** cuando termina la manipulacion de la celda */
@Override
public boolean stopCellEditing() {
value = ((Boolean)getCellEditorValue()).booleanValue() ;
((JCheckBox)component).setSelected( value );
return super.stopCellEditing();
}
/** retorna componente */
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value == null)
return null;
return ( (JCheckBox) component );
}
}
Y la clase Render_CheckBox:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Render_CheckBox extends JCheckBox implements TableCellRenderer {
private final JComponent component = new JCheckBox();
/** Constructor de clase */
public Render_CheckBox() {
setOpaque(true);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
boolean b = ((Boolean) value).booleanValue();
( (JCheckBox) component).setSelected( b );
return ( (JCheckBox) component);
}
}
Ojala alguien pueda ayudarme, de verdad es algo urgente :S
de antemano Gracias!
Valora esta pregunta


0