daquinho:
configurei a minha tabela para reordenar os registros quando click no cabeçalho da coluna, (pensei que ia ter que fazer na mão mas é mole-mole ainda mais no netbeans ), mas ai me ferrou noutra coisa. Quando seleciono uma linha, pensei em devolver para o modelo o número da linha e lá ele pegar um id (chave primária) para localizar todos os meus registros dessa linha da tabela, mas com a tabela sortablel, essa ordem pode mudar e consequentemente o número do row da tabela.
lá no select do modelo eu tenho um campo que não é carregado na tabela, empresa.id, o que acha de eu colocar ele no fim da tabela sem o exibir? quando eu selecionar a linha da tabela, busco apenas esse dado. O que acha(m)? fica feio? tem outro jeito?
com getvalueAt() não dá para buscar essa coluna da linha, claro, pois não existe coluna, deixei essa coluna omitida assim mesmo pensando em daquiapouco resgatar essa row com um cast desse bena que popula a tabela.
com esse problema da seleção da linha da tabela, acredito estar avançado e só faltar como buscar essa linha da tabela.
quando a cadastrar, depois de cadastrar um formulário, quero atualizar automaticamente a minha tabela, mas não estou conseguindo, tenho q fechar e reabrir o programa.
o meu modelo ficou assim.
class TabelaModelo extends AbstractTableModel{
private String[] colunas = {"EMPRESA","NOME","TELEFONE1","RÁDIO", "ESTADO","MUNICÍPIO"};
private List<BeanTabelaModelo> dados;
private DaoTabelaModelo daoTabelaModelo = new DaoTabelaModelo();
public TabelaModelo(){
try {
setDados(daoTabelaModelo.listarParaTabela());
} catch (SQLException ex) {
ErroAgenda.exibirMensagemErro("não é possível listar na tabela:\n"+ex);
}
}
public List<BeanTabelaModelo> getDados() {
return dados;
}
private void setDados(List<BeanTabelaModelo> dados) {
this.dados = dados;
}
public int getRowCount() {
return dados.size();
}
public int getColumnCount() {
return colunas.length;
}
public Object getValueAt(int rowIndex, int columnIndex) {
// SQL usado para popular a lista
//select empresa.id, empresa.nomefantasia, contato.nome, telefone.telefonefixo1, telefone.radio, endereco.estado, endereco.municipio from empresa, contato, telefone, endereco where empresa.id_contato=contato.id and empresa.id_telefone=telefone.id and empresa.id_endereco=endereco.id
BeanTabelaModelo linha = dados.get(rowIndex);
if(columnIndex == 0) return linha.getNomeFantasia();
if(columnIndex == 1) return linha.getNomeContato();
if(columnIndex == 2) return linha.getTelefone1();
if(columnIndex == 3) return linha.getRadio();
if(columnIndex == 4) return linha.getEstado();
if(columnIndex == 5) return linha.getMunicipio();
if(columnIndex == 6) return linha.getId_empresa();
return "";
}
@Override
public String getColumnName(int column) {
return colunas[column];
}
public void alterarDadosDaTabela(){
fireTableRowsUpdated(0, getRowCount()-1);
}
public void adicionarDadosNaTabela(){
fireTableRowsInserted(getDados().size()-1, getDados().size()-1);
}
}
a tela onde eu cadastro e altero o formulário:
/**
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*
* TelaCadastro.java
*
* Created on 27/01/2011, 15:06:30
*/
package agenda.telas;
import agenda.bean.BeanTabelaModelo;
import agenda.dao.Dao;
import agenda.dao.DaoContato;
import agenda.dao.DaoEmpresa;
import agenda.dao.DaoEndereco;
import agenda.dao.DaoTelefone;
import agenda.excessao.ErroAgenda;
import java.awt.Color;
import java.awt.event.ActionListener;
import java.awt.event.KeyListener;
import java.sql.SQLException;
import javax.swing.JOptionPane;
/**
*
* @author ti-rj
*/
public class TelaCadastro extends javax.swing.JDialog implements KeyListener, ActionListener{
private Dao dao;
/** Creates new form TelaCadastro */
public TelaCadastro() {
initComponents();
}
/**
*
* @param BeanTabelaModelo
* Contrutor usado para receber o bean selecionado na tabela.
*/
public TelaCadastro(BeanTabelaModelo beanTabelaModelo){
long id = beanTabelaModelo.getId_empresa();
preencherBeans(id);
initComponents();
preencherCampos();
}
/**
* preenche os beans de acordo com o id passado como parâmetro
* @param id_empresa
*/
private void preencherBeans(long id_empresa){}
/**
* pega os beans e preenche os campos do formulário
*/
private void preencherCampos(){}
/**
* Pega os valores dos campos e os salva em beans
*/
private void salvarCampos(){ }
/**
*se o médoto retornar false, é porque um dos campos tem o seu texto acima do limite permitido,
* caso retorne true, os campos está dentro dos limites.
* @return boolean
*
*/
private boolean validarCampos(){ }
/**
* limpa todos os campos do formulário
*/
private void limparCampos(){ }
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
.
.
.
public void actionPerformed(java.awt.event.ActionEvent evt) {
if (evt.getSource() == btnGravar) {
TelaCadastro.this.btnGravarActionPerformed(evt);
}
}
public void keyPressed(java.awt.event.KeyEvent evt) {
if (evt.getSource() == txaContatoDescricao) {
TelaCadastro.this.txaContatoDescricaoKeyPressed(evt);
}
}
public void keyReleased(java.awt.event.KeyEvent evt) {
}
public void keyTyped(java.awt.event.KeyEvent evt) {
}// </editor-fold>
private void txaContatoDescricaoKeyPressed(java.awt.event.KeyEvent evt) {
lblQuantidade.setText((500 - txaContatoDescricao.getText().length())+"");
}
private void btnGravarActionPerformed(java.awt.event.ActionEvent evt) {
long id_contato , id_empresa, id_endereco, id_telefone;
salvarCampos();
DaoContato daoContato = new DaoContato();
DaoEndereco daoEndereco = new DaoEndereco();
DaoTelefone daoTelefone = new DaoTelefone();
DaoEmpresa daoEmpresa = new DaoEmpresa();
TabelaModelo tabelaModelo = new TabelaModelo();
String msg = "";
if(validarCampos() == true){
if(empresa.getId() == -1){
id_contato = daoContato.cadastrar(contato);
id_endereco = daoEndereco.cadastrar(endereco);
id_telefone = daoTelefone.cadastrar(telefone);
empresa.setIdContato(id_contato);
empresa.setIdEndereco(id_endereco);
empresa.setIdTelefone(id_telefone);
daoEmpresa.cadastrar(empresa);
tabelaModelo.fireTableRowsInserted(tabelaModelo.getRowCount()-1,tabelaModelo.getRowCount()-1);
msg = "Cadastrado!";
} else {
daoContato.alterar(contato);
daoEndereco.alterar(endereco);
daoTelefone.alterar(telefone);
daoEmpresa.alterar(empresa);
tabelaModelo.fireTableRowsUpdated(0,tabelaModelo.getRowCount()-1);
msg = "Alterado!";
}
}
JOptionPane.showMessageDialog(null, msg);
this.dispose();
}
}
com ceteza se eu conseguir colocar o tabela atualizando em automático no cadastro, vou conseguir fazer ele tb atualizar no update dos registros e tb o deletar.
nas linhas 153 e 163, eu tentei tb chamar alterarDadosDaTabela() e adicionarDadosNaTabela() em tabelaModelo, eles fazer a mesma coisa, mas de dentro de TabelaModelo, mas tb não adiantou em nada.