Atualizar uma tabela atraves de uma pesquisa

4 respostas
M

Ola pessoal.

Estou com uma JDialog com uma JTable listando alguns produtos, nesta mesma JDialog existe um sistema de busca por nome de fornecedor e periodo data de compra, eu ja implementei essa parte. O que eu quero que
aconteça e que ao fazer a pesquisa a JTable liste somente os os resultados da pesquisa.

acho que deu para entender… valeu pessoal 8)

4 Respostas

kdoigor

vei…
cria uma classe tabela e joga seu resultset pra ela e ela retorna um modeltable
depois vc atualiza sua jtable com o seu modeltable

se não ficou claro eu te mando um exemplo

M

valeu pela resposta cara!!

Eu ja extendi a classe AbstractTableModel.
eu quero q ao fazer uma pesquisa a JTable mostre somente o resultado da pesquisa,
naum existe um metodo:fireTable… para fazer isso, eu naum preciso de um codigo pronto,
soh quero uma ideia de como fazer isso.

Abaixo esta o modelo da minha tabela.

public class modeloTabela extends AbstractTableModel {

    List <Cliente> dataCliente = new ArrayList<Cliente>();
    List <Produto> dataProduto = new ArrayList<Produto>();
    List <Modelo>  dataModelo  = new ArrayList<Modelo>();
    List <Marca>   dataMarca   = new ArrayList<Marca>();
    List <Cor>     dataCor     = new ArrayList<Cor>();
    final String [] colunas = {"Código","Data Mov",
                               "Data Compra","Cliente/Fornecedor",
                                "Placa","Modelo","Marca"};
    
    public int getRowCount() {
        
        return dataCliente.size();
    }

    public int getColumnCount() {
        return colunas.length;
    }
    
    
    public String getColumnName(int col){
        return colunas[col];
    }
    
    public boolean isCellEditable(int row,int col){
        return false;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        Cliente cliente =(Cliente)dataCliente.get(rowIndex);
        Produto produto =(Produto)dataProduto.get(rowIndex);
        Modelo  modelo  =(Modelo)dataModelo.get(rowIndex);
        Marca   marca   =(Marca)dataMarca.get(rowIndex);
        if(cliente==null || produto==null){
            return null;
        }
        switch(columnIndex){
            case 0 : return produto.getIdproduto();
            case 1 : return produto.getDatamov();
            case 2 : return produto.getDatacompra();
            case 3 : return cliente.getNome();
            case 4 : return produto.getPlaca();
            case 5 : return modelo.getModelo();
            case 6 : return marca.getMarca();
        
        }
        return null;        
    }
    
    
    public void Consulta() throws Exception{
        String sql  ="Select cliente.idcliente,cliente.nome,cliente.tipo,";
               sql +="produto.idproduto,produto.lote,produto.anofab,produto.anomod,";
               sql +="date_format(datacompra,'%d/%m/%Y') as datacompra,";
               sql +="date_format(datamov,'%d/%m/%Y') as datamov,";
               sql +="produto.chassis,produto.renavan,produto.placa,";
               sql +="produto.nmotor,produto.ncambio,produto.ndiferencial,";
               sql +="produto.baixado,produto.preco,produto.observ,";
               sql +="produto.fmarca,produto.fmodelo,produto.fcor,";
               sql += "marca.*,modelo.*,cor.* ";
               sql +="FROM cliente,produto,marca,modelo,cor ";
               sql +="WHERE cliente.idcliente=produto.idcliente";
               sql +=" and produto.Fmarca=marca.idmarca";
               sql +=" and produto.Fmodelo=modelo.idmodelo";
               sql +=" and produto.Fcor=cor.idcor";
               Consulta consulta = new Consulta();
               ResultSet result = (ResultSet) consulta.getResultado(sql);
               while(result.next()){
                   Cliente cliente = new Cliente();
                   cliente.setId(result.getInt("idcliente"));
                   cliente.setNome(result.getString("nome"));
                   cliente.setTipo(result.getString("tipo"));
                   dataCliente.add(cliente);
                   Produto produto = new Produto();
                   produto.setIdproduto(result.getInt("idproduto"));
                   produto.setLote(result.getString("lote"));
                   produto.setMarca(result.getInt("Fmarca"));
                   produto.setModelo(result.getInt("Fmodelo"));
                   produto.setAnofab(result.getString("anofab"));
                   produto.setAnomod(result.getString("anomod"));
                   produto.setDatamov(result.getString("datamov"));
                   produto.setDatacompra(result.getString("datacompra"));
                   produto.setChassis(result.getString("chassis"));
                   produto.setRenavan(result.getString("renavan"));
                   produto.setCor(result.getInt("Fcor"));        
                   produto.setNcambio(result.getString("Ncambio"));
                   produto.setNdiferencial(result.getString("Ndiferencial"));
                   produto.setNmotor(result.getString("Nmotor"));
                   produto.setPlaca(result.getString("placa"));
                   produto.setPreco(result.getFloat("preco"));
                   produto.setBaixado(result.getInt("baixado"));
                   produto.setObservacao(result.getString("Observ"));
                   dataProduto.add(produto);
                   Modelo modelo = new Modelo();
                   modelo.setIdmodelo(result.getInt("idmodelo"));
                   modelo.setModelo(result.getString("modelo"));
                   dataModelo.add(modelo);
                   Marca marca = new Marca();
                   marca.setIdMarca(result.getInt("idmarca"));
                   marca.setMarca(result.getString("marca"));
                   dataMarca.add(marca);
                   Cor cor = new Cor();
                   cor.setIdcor(result.getInt("idcor"));
                   cor.setCor(result.getString("cor"));
                   dataCor.add(cor);
               
               }
               consulta.FecharConn();
    
    }
    
    public Cliente getCliente(int row){
        return (Cliente) dataCliente.get(row);
    }
    
    public Cor getCor(int row){
        return (Cor) dataCor.get(row); 
    }
    
    public Marca getMarca(int row){
        return (Marca) dataMarca.get(row);
    }
    
    public Modelo getModelo(int row){
        return (Modelo) dataModelo.get(row);
    }
    
    public Produto getProduto(int row){
        return (Produto) dataProduto.get(row);
    } 
    
    
    public void clear(){
        this.dataCliente.clear();
        this.dataCor.clear();
        this.dataMarca.clear();
        this.dataModelo.clear();
        this.dataProduto.clear();
        fireTableDataChanged();
    }
    
    
    

}
kdoigor

como eu vim do delphi, eu programo de uma forma um pouco diferente.

vo analisar seu código ate o fim da smana, mas vo dexa minha classe tabela pra vc ver, quem sabe te ajuda... =====================================================================
/** Classe para manipulação de JTable e ResultSets
 * lista os resultados da consulta e permite manipulação desses dados passando a linha slecionada para a tela de cadastro
 * @author Igor Nunes
 * @since 28/06/2007
 * @version versão 1.0
 */
import javax.swing.table.*;
import java.sql.*;
import java.util.*;

public class Tabela extends DefaultTableModel
{
    //atributos da tabela 
    private int linhas = 0;
    private String[] colunas = null;
    private ResultSetMetaData metadata; 
    private ResultSet dados;
    //variavel de conexão com o banco  
    private Conexao conexao = new Conexao();
    
    /**Método construtor de tabela
     *@param dados - ResultSet com os dados da consulta
     *@param colunas - Array de String com os nomes das colunas
     */
    public Tabela ( ResultSet dados, String[] colunas)
    {
        this.dados = dados;
        this.colunas = colunas;          
    }
    
    public Tabela() {}
    
    /**Método que retorna as colunas da tabela
     *@return String[] - colunas da tabela*/
    public String[] getColunas()
    {
        return colunas;
    }
    
        
    /**Método que retorna os dados da tabela
     *@return String[] - colunas da tabela*/
    public ResultSet getDados()
    {
        return dados;
    }
       
    /** Método para obter as colunas
     *@param String[] - colunas da tabela*/
    public void setColunas(String[] colunas)
    {
        this.colunas = colunas;
    }
    
    /** Método para obter os dados da tabela  
     *@param ResultSet - dados da tabela*/
    public void setDados(ResultSet dados)
    {
        this.dados = dados;
    }

    /**Método que retorna o número de linhas da tabela
     *@return int - número de linhas*/
    public int getRowCount() 
    {
        int x = 0;
        try
        {
             if (dados != null) 
             {
                 //move para a ultima linha
                 dados.last();  
                //pega o número da linha
                x = dados.getRow();
             }               
        } 
        catch (SQLException ex)
        {
            ex.printStackTrace();
        }           
        //informa a jTable as alterações
        //fireTableStructureChanged(); 
        return x;
    }

     /**Método que retorna o número de colunas da tabela
     *@return int - número de colunas*/
    public int getColumnCount()
    {
        return getColunas().length;        
    }

    /**Método que retorna o valor na linha e coluna
     *@return Object - valor na linha e coluna*/
    public static Object getValorCelula(int linha, int coluna)
    {
        // cria um modelo de tabela 
         DefaultTableModel modelo = new DefaultTableModel() ;
        return modelo.getValueAt(linha,coluna);        
    }
    
     /**Método que cria os objetos para preencher a tabela
      *@param ResultSet - dados do resultset de consulta
      *@return DefaultTableModel - modelo da tabela*/
    public DefaultTableModel criaTabela(ResultSet dados) throws SQLException
    {
        DefaultTableModel modelo;
        if (dados != null)
        {
            // cria um modelo de tabela com os nomes de colunas e o numero de linhas
            modelo = new DefaultTableModel(colunas,0) ;
            // variávem num recebe o numero de colunas
            int num = getColumnCount();
            //criando um Array de Objetos
            Object[] objetos = new Object[num];
            //laço de repetição para preencher os objetos
            dados.first();
            do {
                // for para preencher a tabela
                 for (int i = 0; i < num; i++)
                 {
                      objetos[i] = dados.getObject(i+1);                  
                } 
                //adiciona os objetos na tabela
                modelo.addRow(objetos); 
            }while(dados.next());  
        }
        else
              modelo = criaTabela();
        
        return modelo; 
    }
    
    /**Método que limpa a tabela
     *@return DefaultTableModel - modelo da tabela*/
    public DefaultTableModel criaTabela()
    {
         DefaultTableModel modelo = new DefaultTableModel(colunas,0);
         return modelo; 
    }
                    
}

========================================
pra chamar

try
        {
            //cria um novo usuário e uma tabela com o resultado da pesquisa
            Usuario user = new Usuario();
            ResultSet dados = user.pesquisarUsuario(TxtFPesquisa.getText().trim());
            Tabela resultado = new Tabela(dados,user.nomeColunas());
            TblUsuario.setModel(resultado.criaTabela(dados));
        }
        catch

=======================================
para apresentar os dados na tela vc cria um vetor de objetos com a linha selecionada e manda pra sua tela cadastro
e depois cria um método que percorre seus componentes e atualiza os campos conforme os tipos de dados.

M

Valeu pela resposta cara!!!

ja consegui resolver o problema, fiz um metodo com uma nova consulta ao banco com o WHERE com os parametros da busca… e usei o metodo fireTableChanged() para atualizar a tabela.

Obrigado pela ajuda :smiley:

Criado 8 de dezembro de 2007
Ultima resposta 10 de dez. de 2007
Respostas 4
Participantes 2