Carregar uma DefaultTablemodel com dados de 2 tabelas

Pessoal, boa noite alguém pode me dizer como chamo um dado de outra tabela neste DefaultTableModel? segue abaixo o código.

try {
            DefaultTableModel model = (DefaultTableModel) jtVendas.getModel();
            model.setNumRows(0);
            lista = new DAOVendas().getListaVendasDAO();
            listac = new DAOCliente().getListaClienteDAO();
            for (ModelVendas c : lista) {

                model.addRow(new Object[]{
                    c.getIdVendas(),
                    modelCliente.getCliNome(),
                    c.getForpgto(),
                    c.getVenDataVenda()
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
            Msg.erro(this, "Erro ao atulizar tabela\nErro: " + e.getMessage());
        }
    }

Como que uma Venda e um Cliente se relaciona nas suas classes? A venda possui um cliente?

Sim possui, tenho uma classe ModelVendas que tem o cliente mas somente o código do cliente, o nome do cliente fica em outra classe ModelCliente.

Desse jeito que vc fez não funciona? Dá algum erro?

Acho que já recomendei isso, mas seria melhor se vc usasse o AbstractTableModel em vez de DefaultTableModel.

Entao Lucas, ate fiz com o AbstractTableModel porem cara eu tenho que mudar toda a estrutura de pesquisa, soma de colunas, e como estou começando ainda nao sei muito de AbstractTableModel, sim achei bem melhor para se trabalhar, mas como o sistema que fiz ja esta rodando tudo certinho nao quero mudar, depois vou entrar a fundo com a AbstractTableModel em outros projetos.
E entao, desta forma que esta eu penso que teria que dar certo, nao da erro algum, simplesmente nao retorna nada na tabela.

Depende de como ta seu modelo de dados. Mas no geral basta fazer os joins necessários no SQL e retornar um único resultset com todas as informações necessárias pra funcionalidade.

Cria por exemplo uma classe DTO “VendaClienteDto” com os atributos que precisar de ambas as tabelas e joga o resultset direto nesse DTO.

Como nao postou o modelo de dados, segue um exemplo genérico pra te ilustrar:

SQL:

select c.nome_cliente, v.data_venda
from venda v 
inner join cliente c on v.id_cliente = c.id_cliente

Estrutura pra comportar os dados necessários:

public class VendaClienteDto {
	String nomeCliente;
	Date dataVenda;
	//etc do que precisar

	//get..set..
}

Obrigado deu certo aqui, obrigado mesmo.

Ué, pra que mudar a estrutura?

Um TableModel nada mais é do que a fonte de dados para a sua JTable obter os valores a serem renderizados nas células.

O ruim do DefaultTableModel, é que você precisa inserir os valores nus e crus dentro dele e isso geralmente é feito através de laços chamando o método addRow.

Faz o seguinte, posta o código inteiro da sua tela que eu te escrevo o TableModel em uma inner-class pra você ver como fica mais limpo e fácil de entender.

:wink:

1 curtida

staroski, valeu mesmo mas já consegui, disse mudar a estrutura pois deu muitos erros tinha que mudar muitas coisas, e como disse não entendo da Abstract ainda, vou terminar este projeto que estou já acostumado, e vou sim fazer um projeto com a Abstract, achei mesmo bom bom trabalhar com ela.

Em questão de carregar a tabela fiz desta forma abaixo e deu certinho.

private void carregarVendas() {
        listaModelVendasClientes = controllerVendasCliente.getListaVendasClienteControler();
        DefaultTableModel modelo = (DefaultTableModel) jtVendas.getModel();
        modelo.setNumRows(0);
        int cont = listaModelVendasClientes.size();
        modelo.setNumRows(0);
        for (int i = 0; i < cont; i++) {
            modelo.addRow(new Object[]{
                listaModelVendasClientes.get(i).getModelVendas().getIdVendas(),
                listaModelVendasClientes.get(i).getModelCliente().getCliNome(),
                Utils.convertData(listaModelVendasClientes.get(i).getModelVendas().getVenDataVenda()),
                Utils.convertDouble(listaModelVendasClientes.get(i).getModelVendas().getVenValorLiquido()),
                listaModelVendasClientes.get(i).getModelVendas().getForpgto()
            });
            somarValores();
        }
    }