pessoal, peço antecipadamente desculpa pela minha ignorância, mas estou começando em programação JAVA (antes VBA EXCEL , basico) e estou com problema em implementar a alteração num JTABLE , quando altero um campo (checkbox). Ele altera o visual mas não grava a alteração. Confesso que faz 3 dias que leio, vejo artigos releio… acho que é uma coisa simples, mas para mim ficou absurdamente extressante…
Implementei a AbstractTableModel… (vide codigo abaixo):
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.table.AbstractTableModel;
public class modeloTabelaCheckBox extends AbstractTableModel{
private ArrayList linhas = null;
private String[] colunas = null;
public modeloTabelaCheckBox(ArrayList lin, String[] col){
setLinhas(lin); // jogo o array preenchido para a variavel linhas -> metodo set abaixo....
setColunas(col); // seta o total de colunas para variavel colunas -> metodo set abaixo
}
public void setColunas(String[] nomes) {
this.colunas = nomes;
}
public void setLinhas(ArrayList dados) {
this.linhas = dados;
}
@Override
public Class getColumnClass(int c) {
/* Class klass = String.class;
if (column == 0){
klass = Boolean.class;
return klass;
}*/
return getValueAt(0,c).getClass();
}
@Override
public boolean isCellEditable(int row, int column) {
return column == 0;
}
public ArrayList getLinhas() { //
return linhas;
}
public String[] getColunas() {
return colunas;
}
@Override
public int getColumnCount(){
return colunas.length; // conta o tamanhode colunas ...
}
@Override
public int getRowCount(){
return linhas.size(); // conta o tamanho do array
}
@Override
public String getColumnName(int numCol){ // pega o nome da coluna.... através do numero da coluna...
return colunas[numCol]; // retorna o nome da coluna....
}
@Override
public Object getValueAt(int numLin, int numCol){ // retorn
Object[] linha = (Object[])getLinhas().get(numLin);
return linha[numCol];
}
public void setValueAt(Object valor, int numLin, int numCol){ ////// ESTE É O METODO QUE PRECISO FAZER , alterar o campo booleano na table .....
????? /// um campo checkbox....
// boolean selecao = (boolean)this.getValueAt(numLin, numCol);
if( (boolean) valor == false){
valor = true;
}
????
fireTableCellUpdated(numLin, numCol);
????
}
}
Aqui é onde eu preencho a Table e a chamo … (codigo abaixo … )
private void preencherTabelaReceita(String sql){
ArrayList dados = new ArrayList();
String[] colunas = new String[]{“Sel:”,“Reg:”,“Medicamento”, “Quantidade :”, “Unidade:”, “Forma de Uso:”,“Posologia:”, “Port.:”};
Statement stm = null;
ResultSet rs = null;
try {
conexao.conecta(1); // 1 quer dizer medconBD1 e 0 - medconBD
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro ao acessar BDados!\n " + ex);
}
try {
stm = conexao.conn.createStatement();
rs = stm.executeQuery(sql);
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "ERRO COMANDOS SQL !\n " + ex);
}
try {
if (rs.next()) {
do {
dados.add(new Object[]{false, rs.getInt(“id_receitas”,rs.getString(“nome_remedio”, rs.getString(“qtdade”, rs.getString(“unidade”,
rs.getString(“posologia”, rs.getString(“posologia1”,rs.getString(“Portaria”});
} while (rs.next());
}
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro preenchimento ARRAY ! \n " + ex);
}
conexao.desconecta();
stm = null;
rs = null;
modeloTabelaCheckBox modelo = new modeloTabelaCheckBox(dados, colunas);
tbl_Receita.setModel(modelo);
tbl_Receita.getColumnModel().getColumn(0).setPreferredWidth(60);
tbl_Receita.getColumnModel().getColumn(0).setResizable(false);
tbl_Receita.getColumnModel().getColumn(1).setPreferredWidth(60);
tbl_Receita.getColumnModel().getColumn(1).setResizable(false);
tbl_Receita.getColumnModel().getColumn(2).setPreferredWidth(220);
tbl_Receita.getColumnModel().getColumn(2).setResizable(false);
tbl_Receita.getColumnModel().getColumn(3).setPreferredWidth(90);
tbl_Receita.getColumnModel().getColumn(3).setResizable(false);
tbl_Receita.getColumnModel().getColumn(4).setPreferredWidth(70);
tbl_Receita.getColumnModel().getColumn(4).setResizable(false);
tbl_Receita.getColumnModel().getColumn(5).setPreferredWidth(190);
tbl_Receita.getColumnModel().getColumn(5).setResizable(false);
tbl_Receita.getColumnModel().getColumn(6).setPreferredWidth(190);
tbl_Receita.getColumnModel().getColumn(6).setResizable(false);
tbl_Receita.getColumnModel().getColumn(7).setPreferredWidth(70);
tbl_Receita.getColumnModel().getColumn(7).setResizable(false);
Se uma santa alma puder me ajudar nesta implementação fico grato !!!