La colonna 0 della tabella è riempita attraverso una query ad un database; ad ogni record è
associato un checkbox. Questi sono i miei renderer ed editor per i checkbox.
codice:
class RadioButtonRenderer implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (value==null) return null;
return (Component)value;
}
}
class RadioButtonEditor extends DefaultCellEditor implements ItemListener {
private JRadioButton button;
public RadioButtonEditor(JCheckBox checkBox) {
super(checkBox);
}
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column) {
if (value==null)
return null;
button = (JRadioButton)value;
button.addItemListener(this);
return (Component)value;
}
public Object getCellEditorValue() {
button.removeItemListener(this);
return button;
}
public void itemStateChanged(ItemEvent e) {
super.fireEditingStopped();
}
}
Una volta che l'utente seleziona uno o più checkbox e imposta i valori nei menu a tendina a questi associati, deve cliccare su OK.
Cliccando su OK devo poter capire quali checkbox l'utente ha selezionato e leggere i valori che ha impostato inserendoli in una lista:
List<Integer> lista = new ArrayList<Integer>();.
Questo è il gestore del bottone OK.
codice:
private class GestoreBottoni implements ActionListener {
public void actionPerformed(ActionEvent e) {
if(e.getSource() == ok) {
for(int i = 1; i < tabella.getRowCount(); i++) { // la riga 0 contiene solo i nomi delle colonne
boolean selezione = (Boolean)tabella.getValueAt(i, 0);
if(selezione == true) {
for(int col = 1; col <= 4; col++) {
lista.add((Integer)tabella.getValueAt(i, col));
}
}
}
}