Ajuda com AbstractTableModel e JPA
Bom dia, peço encarecidamente ajuda referente a este erro que estou passando...ja tentei de todos os jeitos e por falta de experiência em java não consegui visualizar o erro para uma possivel correção.
Tenho uma jTable onde criei meu proprio modelo implementando o método AbstractTableModel....
O problema que estou passando é o seguinte, eu consigo preencher a tabela com uma consulta feita no banco...porém não consigo adcionar ou remover uma linha...
O intrigante é que se eu criar a tabela sem preencher com uma consulta...eu adciono linhas...excluos e faço todas as manipulações...mas quando preencho ela com uma consulta fico com esse problema...
O erro que dá é este... >>
Quando executo o script abaixo...na ação de um botão.
Abaixo meus códigos de implementação.
Tenho uma jTable onde criei meu proprio modelo implementando o método AbstractTableModel....
O problema que estou passando é o seguinte, eu consigo preencher a tabela com uma consulta feita no banco...porém não consigo adcionar ou remover uma linha...
O intrigante é que se eu criar a tabela sem preencher com uma consulta...eu adciono linhas...excluos e faço todas as manipulações...mas quando preencho ela com uma consulta fico com esse problema...
O erro que dá é este... >>
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
Quando executo o script abaixo...na ação de um botão.
int linhaSelecionada = jTable1.getSelectedRow(); modelOrcprodAlt.remove(linhaSelecionada);
O erro é nessa linha >> modelOrcprodAlt.remove(linhaSelecionada);
Abaixo meus códigos de implementação.
package Tabelas;
import com.rcff.gd.dto.OrcprodDto;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
/**
*
* @author ULTRA
*/
public class TabelaOrcProdAlt extends AbstractTableModel {
private List<OrcprodDto> linhas;
private String[] colunas;
public TabelaOrcProdAlt(List<OrcprodDto> pacote_de_dados, String[] nome_das_colunas) {
setLinhas(pacote_de_dados);
setColunas(nome_das_colunas);
}
@Override
public int getRowCount() {
int tamanho = linhas.size();
return tamanho;
}
@Override
public int getColumnCount() {
int tamanho = colunas.length;
return tamanho;
}
public Object getValueAt(int linha, int coluna) {
Object value = null;
final OrcprodDto dto = (OrcprodDto) linhas.get(linha);
switch (coluna) {
case 0:
value = String.format("%03d", dto.getItem());
break;
case 1:
value = dto.getCodprod();
break;
case 2:
value = dto.getQuantidade();
break;
case 3:
value = dto.getDescricao();
break;
case 4:
value = dto.getMarca();
break;
case 5:
value = dto.getValorunitario();
break;
case 6:
value = dto.getValortotal();
break;
}
return value;
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
OrcprodDto dto = linhas.get(rowIndex);
switch (columnIndex) {
case 0:
dto.setItem((int) aValue);
break;
case 1:
dto.setCodprod((String) (aValue));
break;
case 2:
dto.setQuantidade((int) aValue);
break;
case 3:
dto.setDescricao((String) aValue);
break;
case 4:
dto.setMarca((String) aValue);
break;
case 5:
dto.setValorunitario((Double) (aValue));
break;
case 6:
dto.setValortotal((Double) (aValue));
break;
default:
// Não deve ocorrer, pois só existem 3 colunas
throw new IndexOutOfBoundsException("columnIndex out of bounds");
}
fireTableCellUpdated(rowIndex, columnIndex);
}
@Override
public String getColumnName(int num) {
String nome = colunas[num];
return nome;
}
public List getLinhas() {
return linhas;
}
public void setLinhas(List<OrcprodDto> linhas) {
this.linhas = linhas;
}
public String[] getColunas() {
return colunas;
}
public void setColunas(String[] colunas) {
this.colunas = colunas;
}
public void remove(int linhaIndex) {
this.linhas.remove(linhaIndex);
fireTableDataChanged();
}
}
import com.rcff.gd.dto.OrcprodDto;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
/**
*
* @author ULTRA
*/
public class TabelaOrcProdAlt extends AbstractTableModel {
private List<OrcprodDto> linhas;
private String[] colunas;
public TabelaOrcProdAlt(List<OrcprodDto> pacote_de_dados, String[] nome_das_colunas) {
setLinhas(pacote_de_dados);
setColunas(nome_das_colunas);
}
@Override
public int getRowCount() {
int tamanho = linhas.size();
return tamanho;
}
@Override
public int getColumnCount() {
int tamanho = colunas.length;
return tamanho;
}
public Object getValueAt(int linha, int coluna) {
Object value = null;
final OrcprodDto dto = (OrcprodDto) linhas.get(linha);
switch (coluna) {
case 0:
value = String.format("%03d", dto.getItem());
break;
case 1:
value = dto.getCodprod();
break;
case 2:
value = dto.getQuantidade();
break;
case 3:
value = dto.getDescricao();
break;
case 4:
value = dto.getMarca();
break;
case 5:
value = dto.getValorunitario();
break;
case 6:
value = dto.getValortotal();
break;
}
return value;
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
OrcprodDto dto = linhas.get(rowIndex);
switch (columnIndex) {
case 0:
dto.setItem((int) aValue);
break;
case 1:
dto.setCodprod((String) (aValue));
break;
case 2:
dto.setQuantidade((int) aValue);
break;
case 3:
dto.setDescricao((String) aValue);
break;
case 4:
dto.setMarca((String) aValue);
break;
case 5:
dto.setValorunitario((Double) (aValue));
break;
case 6:
dto.setValortotal((Double) (aValue));
break;
default:
// Não deve ocorrer, pois só existem 3 colunas
throw new IndexOutOfBoundsException("columnIndex out of bounds");
}
fireTableCellUpdated(rowIndex, columnIndex);
}
@Override
public String getColumnName(int num) {
String nome = colunas[num];
return nome;
}
public List getLinhas() {
return linhas;
}
public void setLinhas(List<OrcprodDto> linhas) {
this.linhas = linhas;
}
public String[] getColunas() {
return colunas;
}
public void setColunas(String[] colunas) {
this.colunas = colunas;
}
public void remove(int linhaIndex) {
this.linhas.remove(linhaIndex);
fireTableDataChanged();
}
}
private void preencheTabela(int nrorc) {
orcDao = new OrcprodDtoJpaController(emf);
List<OrcprodDto> lista = new ArrayList<OrcprodDto>();
lista = orcDao.consultarPorNtOrc(nrorc);
Object[] orc = null;
dtm = (DefaultTableModel) (TableModel) jTable1.getModel();
// passa os dados do array para o vetor
if (lista.size() > 0) {
// copia os registros lidos do banco
Iterator iter = lista.iterator();
// passa registro a registro para o vetor
for (; iter.hasNext();) {
OrcprodDto dto = (OrcprodDto) iter.next();
// declara o vetor de empregados com o número de registros lidos do banco
orc = new Object[8];
orc[0] = dto.getItem();
orc[1] = dto.getCodprod();
orc[2] = dto.getQuantidade();
orc[3] = dto.getDescricao();
orc[4] = dto.getMarca();
orc[5] = dto.getValorunitario();
orc[6] = dto.getValortotal();
orc[7] = dto.getNrorcprod();
dtm.addRow(orc);
}
TableModel modelo = new TabelaOrcProdAlt(lista, colunas); //lista = meu list/ArrayList e nomes = nome das colunas
jTable1.setModel(modelo);
}
}
orcDao = new OrcprodDtoJpaController(emf);
List<OrcprodDto> lista = new ArrayList<OrcprodDto>();
lista = orcDao.consultarPorNtOrc(nrorc);
Object[] orc = null;
dtm = (DefaultTableModel) (TableModel) jTable1.getModel();
// passa os dados do array para o vetor
if (lista.size() > 0) {
// copia os registros lidos do banco
Iterator iter = lista.iterator();
// passa registro a registro para o vetor
for (; iter.hasNext();) {
OrcprodDto dto = (OrcprodDto) iter.next();
// declara o vetor de empregados com o número de registros lidos do banco
orc = new Object[8];
orc[0] = dto.getItem();
orc[1] = dto.getCodprod();
orc[2] = dto.getQuantidade();
orc[3] = dto.getDescricao();
orc[4] = dto.getMarca();
orc[5] = dto.getValorunitario();
orc[6] = dto.getValortotal();
orc[7] = dto.getNrorcprod();
dtm.addRow(orc);
}
TableModel modelo = new TabelaOrcProdAlt(lista, colunas); //lista = meu list/ArrayList e nomes = nome das colunas
jTable1.setModel(modelo);
}
}
Renato
Curtidas 0