:) Olá !
Bom dia a todos !
Sou iniciante em Java e estou com um projeto da faculdade em Swing pra concluir e tô ficando maluco já ... :(
Seguinte : no meu JFrame tenho duas tabelas. Uma para produtos e outro para serviços, pois trata-se de uma JFrame para CRUD de Ordem de Serviço para uma oficina mecânica. (projeto da facul mesmo !!! coisa acadêmica !!!)
Já populei as duas tabelas com dados do banco usando ArrayLists com generics para as duas classes (Produto e Serviço), sendo que a última coluna de cada tabela está como boolean para permitir marcar/desmarcar pelo usuário. Implementei as classes ServicoModel e ProdutoModel herdando de AbstractTableModel implementei também as classes Servico e ProdutoTableModelListener para capturar os evetos de clique na última coluna de cada tabela.
Agora vamos ao problema : tenho tentado implementar o método setValueAt(Object value,int row,int column) nas classes Model de Produto e Serviço, mas não estou conseguindo fazer com que seja modificado o status do checkbox de true para false e vice-e-versa.
Um dos problemas que encontrei é a questão do casting de objeto da classe serviço para Object, pois estou trabalhando com ArrayList usando generics como disse anteriormente.
Gostaria também que alguma caridosa alma me indicasse o caminho para efetuar a atualização no banco após efetuada alguma modificação do status da coluna da tabela que é boolean.
Agradeço antecipadamente a qualquer um que possa me ajudar nesta empreitada.
P.S.: Por favor, não me indiquem o tutorial da Sun, pq já o consultei e não foi capaz de sanar a minha dúvida.
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
import br.com.entities.Servico;
public class ServicoModel extends AbstractTableModel {
private ArrayList <Servico> servicos;
private ArrayList linhas=null;
public ServicoModel(ArrayList <Servico> servicos) {
this.servicos=servicos;
setLinhas(servicos);
}
//Retorna a classe especifica (tipo) para cada coluna da tabela
//É usado pelo JTable para configurar a apresentação
@Override
public Class<?> getColumnClass(int columnIndex) {
Class classe=null;
switch (columnIndex){
case 0 : classe = Integer.class; break;
case 1 : classe = String.class; break;
case 2 : classe = Double.class; break;
case 3 : classe = Double.class; break;
case 4 : classe = Double.class;break;
case 5 : classe = Boolean.class;break;
}
return classe;
}
//Retorna o número de colunas no modelo
//JTable usa este método para determinar colunas criadas/exibidas
public int getColumnCount() {
return 6;
}
//Retorna o nome da coluna na posicao do indice recebido
//É usado para inicializar e exibir o nome de cada coluna da tabela
@Override
public String getColumnName(int columnIndex) {
String columnName = null;
switch (columnIndex){
case 0 : columnName = "Cod"; break;
case 1 : columnName = "Descrição"; break;
case 2 : columnName = "Duração"; break;
case 3 : columnName = "Vlr Hora/Fração"; break;
case 4 : columnName = "Vlr Total"; break;
case 5 : columnName = "Selecão";break;
}
return columnName;
}
//Retorna o número de linhas no modelo
//JTable usa este método para determinar quantas linhas devem ser exibidas
public int getRowCount() {
return servicos.size();
}
//Retorna o valor a ser preenchido em cada célula da tabela de acordo
// com o indice dado para linha e indice dado para a coluna
public Object getValueAt(int rowIndex, int columnIndex) {
Servico serv = servicos.get(rowIndex); //obtem um objeto da lista de objetos
Object retorno = null; //prepara um objeto para retorno no método
switch (columnIndex){ //seleciona e retorno o objeto de acordo com valor coluna
case 0 : retorno = serv.getIdservico(); break;
case 1 : retorno = serv.getDescricao(); break;
case 2 : retorno = serv.getDuracao(); break;
case 3 : retorno = serv.getVlrhora();break;
case 4 : retorno = serv.getVlrtotservico();break;
case 5 : retorno = serv.isSelecserv();break;
}
return retorno;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (columnIndex>4) {
return true;
} else {
return false;
}
}
@Override
public void setValueAt(Object valor, int r, int c){
String[] linha = (String[]) getLinhas().get(r);
linha[c] = (String) valor;
fireTableCellUpdated(r,c);
}
/**
* @return the linhas
*/
public ArrayList getLinhas() {
return linhas;
}
/**
* @param linhas the linhas to set
*/
public void setLinhas(ArrayList linhas) {
this.linhas = linhas;
}
}
Obrigado mesmo , Vini !
