Buongiorno ragazzi,
Ho un problema stupido ma è da Venerdì che mi ha bloccato.
nella mia JTable ho messo un JCheckBox che permetterà a tempo debito per indicare a chi verrà spedita una mail ed a chi no.
Però dopo averlo inserito si conporta in maniera mutuamente esclusiva ovvero se clicco uno l'altro che era a true sarà messo a falso e ed il primo non viene portato a true deve essere cliccato per una seconda volta. e questo comportamente viene sempre ripetuto
qui diu seguito posto il codice utilizzato
Inizializzazione tabella e cella che conterrà il CheckBox
codice:
public void ModelingTable(Object [][] dati_t, int rows, int columns, final Object[] dLastUpdating){
// Creo il modello della tabella e l'applico ad un istanza di Jtable
tableModel=null;
TableColumn column=null;
DefaultTableColumnModel columnModel = new DefaultTableColumnModel();
for(int i = 0; i < columns; i++) {
// modello attributi colonna singola
tableModel = new DefaultTableModel1(dati_t, tableHeaders1);
column = new TableColumn(i, widths1[i]);
column.setHeaderValue(tableHeaders1[i]);
columnModel.addColumn(column);
}
// TableModel tableModel = new DefaultTableModel(tableData, tableHeaders);
jTable1 = new JTable(tableModel, columnModel);
for(int i = 0; i < columns; i++) {
jTable1.getColumn("Send_Mail").setCellRenderer(new CheckBoxRenderer());
jTable1.getColumn("Send_Mail").setCellEditor(new CheckBoxEditor(dati_t));
}
...segue
Editor per JCheckBox
codice:
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class CheckBoxEditor extends AbstractCellEditor implements TableCellEditor {
/**
*
*/
private static final long serialVersionUID = -7138255194415617187L;
private JCheckBox jc;
private Object [][] dati;
public CheckBoxEditor(Object [][] dati) {
jc = new JCheckBox();
this.dati=dati;
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
System.out.println();
if (isSelected) {
jc.setForeground(table.getSelectionForeground());
jc.setBackground(table.getSelectionBackground());
}
else{
jc.setForeground(table.getForeground());
jc.setBackground(table.getBackground());
}
return jc;
}
public Object getCellEditorValue() {
return ((JCheckBox)jc).isSelected();
}
public boolean stopCellEditing() {
return super.stopCellEditing();
}
protected void fireEditingStopped() {
super.fireEditingStopped();
}
}
Renderizzazione per il JCheckBox
codice:
import java.awt.Component;
import javax.swing.*;
import javax.swing.table.*;
public class CheckBoxRenderer extends JCheckBox implements TableCellRenderer {
/**
*
*/
private static final long serialVersionUID = 5266080252364837753L;
public CheckBoxRenderer() {
setHorizontalAlignment(JLabel.CENTER);
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (isSelected) {
setForeground(table.getSelectionForeground());
//super.setBackground(table.getSelectionBackground());
setBackground(table.getSelectionBackground());
} else {
setForeground(table.getForeground());
setBackground(table.getBackground());
}
setSelected((value != null && ((Boolean) value).booleanValue()));
return this;
}
}
Grazie mille x ogni aiuto/consiglio.
Ciao