@NelsonS escreveu:
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 !!!!
Mensagens: 8
Participantes: 5