Amigos, boa tarde!
Estive pesquisando aqui mas não encontrei ou não soube implementar nada do que li em meu código.
Meu problema: Tenho uma classe abstrata de um Jtable conforme vi aqui que é o mais correto a ser usado e preciso apresentar dados da lista consultada em um banco (uso postgresql), num objeto Jtable inserido (via swing) em um formulário interno (JInternalFrame) do meu sistema.
Nesse formulário interno eu faço uma busca por um campo específico da minha tabela e utilizando um println() eu consigo ver que o resultado é correto, porém não estou entendendo como eu adicioono esse resultado no meu JTable.
Minha Classe Abstrata:
package br.visao;
import br.modelo.Meio;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
public class TabelaPesquisaGeral extends AbstractTableModel {
// Lista de Meios a serem exibidos na tabela...
private final List<Meio> linhaMeio;
private int numColunas;
// Constantes representando o índice das colunas
private static final int codMeio = 0;
private static final int siglaMeio = 1;
private static final int nomeMeio = 2;
private static final int ExpNomeMeio = 3;
// Cria um TableModel sem nenhuma linha...
public TabelaPesquisaGeral() {
linhaMeio = new ArrayList<Meio>();
}
// Cria um TableModel contendo a lista recebida por parâmetro...
public TabelaPesquisaGeral(List<Meio> listaMeios){
linhaMeio = new ArrayList<Meio>(listaMeios);
}
// métodos sobrescritos...
/**
* @return retorna o número de linhas da table
*/
@Override
public int getRowCount() {
return linhaMeio.size();
}
/**
* @return retorna o número de colunas da table
*/
@Override
public int getColumnCount() {
return numColunas;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
return String.class;
}
@Override
public boolean isCellEditable(int linha, int coluna) {
return coluna == ExpNomeMeio;
}
//Aqui temos que retornar o conteúdo da célula especificada.
// Primeiro obtemos o sócio referente a linha e em seguida verificamos
// o índice da coluna para recuperar o campo correspondente.
@Override
public Object getValueAt(int linha, int coluna) {
// Pega o MeioDAO referente a linha especificada.
Meio meio = linhaMeio.get(linha);
switch (coluna) {
case codMeio:
System.out.println("Valor do Código: " + meio.getCod_Meio());
return meio.getCod_Meio();
case siglaMeio:
System.out.println("Valor da Sigla: " + meio.getMeio_Sigla());
return meio.getMeio_Sigla();
case nomeMeio:
System.out.println("Valor do Nome: " + meio.getMeio_Nome_Completo());
return meio.getMeio_Nome_Completo();
case ExpNomeMeio:
System.out.println("____________________________________________________________\n");
return meio.isMeio_Expandir();
default:
throw new IndexOutOfBoundsException("columnIndex out of bounds");
}
}
@Override
public void setValueAt(Object valor, int linha, int coluna) {
// Pega o sócio referente a linha especificada.
Meio meio = linhaMeio.get(linha);
switch (coluna) {
case codMeio:
meio.setCod_Meio(codMeio);
System.out.println("Valor do Código: " + codMeio);
break;
case nomeMeio:
meio.setMeio_Nome_Completo((String) valor);
System.out.println("Valor do Nome: " + valor);
break;
case siglaMeio:
meio.setMeio_Sigla((String) valor);
System.out.println("Valor da Sigla: " + valor);
break;
case ExpNomeMeio:
meio.setMeio_Expandir((Boolean) valor);
System.out.println("____________________________________________________________\n");
break;
default:
throw new IndexOutOfBoundsException("columnIndex out of bounds");
}
fireTableDataChanged();
}
public Meio getMeio(int indiceLinha) {
return linhaMeio.get(indiceLinha);
}
// Adiciona o meio especificado ao modelo
public void addMeio(Meio meio) {
// Adiciona o registro.
linhaMeio.add(meio);
// Pega a quantidade de registros e subtrai 1 para
// achar o último índice. A subtração é necessária
// porque os índices começam em zero.
int ultimoIndice = getRowCount() - 1;
// Notifica a mudança.
fireTableRowsInserted(ultimoIndice, ultimoIndice);
}
// Remove o meio da linha especificada.
public void removeMeio(int indiceLinha) {
// Remove o registro.
linhaMeio.remove(indiceLinha);
// Notifica a mudança.
fireTableRowsDeleted(indiceLinha, indiceLinha);
}
// Adiciona uma lista de meios no final da lista.
public void addListaDeMeios(List<Meio> meios) {
// Pega o tamanho antigo da tabela, que servirá
// como índice para o primeiro dos novos registros
int indice = linhaMeio.size();
// Adiciona os registros.
linhaMeio.addAll(meios);
// Notifica a mudança.
fireTableRowsInserted(indice, indice + meios.size());
}
// Remove todos os registros.
public void limpar() {
int indice = linhaMeio.size();
// Remove todos os elementos da lista de sócios.
linhaMeio.clear();
fireTableRowsDeleted(0, indice - 1);
// Notifica a mudança.
fireTableDataChanged();
}
}
Agora o método por onde consigo ver o resultadocom um println(), mas não sei como inserir esse resultado no JTable. (Esse método foi escrito no listener do meu botão “pesquisar”…)
private void btnPesquisaGeralMousePressed(java.awt.event.MouseEvent evt) {
// pesquisar se houver dados no campo txtPesquisaGeral
vPesquisa = txtPesquisaGeral.getText();
if ("".equals(vPesquisa)) {
JOptionPane.showMessageDialog(null, "Informe um nome para pesquisa!", "Atenção", WIDTH);
} else {
try {
mDAO = new MeioDAO();
} catch (Exception ex) {
Logger.getLogger(PesquisaGeral.class.getName()).log(Level.SEVERE, null, ex);
}
List<Meio> lmeios = mDAO.getListaMeio(vPesquisa);
int nColunas = lmeios.size();
tblPesquisaGeral.getColumnModel().getColumn(0).setPreferredWidth(30);
tblPesquisaGeral.getColumnModel().getColumn(1).setPreferredWidth(50);
tblPesquisaGeral.getColumnModel().getColumn(2).setPreferredWidth(80);
for (Meio meio : lmeios) {
System.out.println("Codigo: " + meio.getCod_Meio());
System.out.println("Sigla: " + meio.getMeio_Sigla());
System.out.println("Nome: " + meio.getMeio_Nome_Completo());
System.out.println("Expandir Nome: " + meio.isMeio_Expandir() + "\n");
}
tableModel = new TabelaPesquisaGeral();
tableModel.addMeio(meio);
tblPesquisaGeral.setModel(tableModel);
}
}
Preciso da ajuda de vocês…
Me digam onde e como devo alterar meu código…
Agradeço pela ajuda…