Como alterar uma linha em uma JTable?

Tenho uma JTable chamada tbPedido adicionei várias linhas nesta tabela através de um objeto chamado tableModel. Agora fiz uma alteração nos dados de uma linha e quero atualizar esta linha da tabela. Qual código me permite trocar os dados de uma linha da tabela se eu conheço o número da linha que é a variável int linha?

Veja como eu adicionei os dados na tabela:

                        for(int i = 0; i < listaItens.size(); i++ ) {
                            tableModel.addRow(new Object[] {
                                listaItens.get(i).getId(),
                                listaItens.get(i).getId_produto(),
                                listaItens.get(i).getDescricao_produto(),
                                listaItens.get(i).getQuantidade(),
                                listaItens.get(i).getPreco(),
                                listaItens.get(i).getQuantidade() * listaItens.get(i).getPreco()
                            });
                        }

Atenciosamente,
Ronaldo

Você está usando um DefaultTableModel, ele só é legal para conteúdo estático.

Para conteúdo dinâmico, que é o seu caso, ele não é interessante.

Se continuar com o DefaultTableModel, a cada vez que você alterar um objeto da sua lista de itens, você será obrigado a atualizar os elementos do DefaultTableModel.

Vai dar uma trabalheira desnecessária e vai ficar lento.

O correto é você criar o seu próprio TableModel para simplesmente renderizar uma lista de objetos, sem precisar fazer esses loops adicionando itens.

Para isso, basta estender a classe AbstractTableModel e sobrescrever os métodos de interesse. Tenho um exemplo disso feito uns 8 anos atrás.

Para tratar a edição nas células da JTable, basta você sobrescrever o método setValueAt.

Staroski, dá uma olhada no problema que estou enfrentando, é coisa nova, os outros já resolvi.

Observe o código abaixo:

        tbPedido.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
            public void valueChanged(ListSelectionEvent e) { 
                linha = tbPedido.getSelectedRow();
                System.out.println("Linha do pedido: " + linha);
                if(linha != -1) {
                    tfId_item.setText(String.valueOf(listaItens.get(linha).getId()));
                    tfId_produto.setText(listaItens.get(linha).getId_produto());
                    tfQuantidade.setText(String.valueOf(listaItens.get(linha).getQuantidade()));
                    tfPreco.setText(String.valueOf(listaItens.get(linha).getPreco()));
                    setTFItem(false, true);
                    //btNovo2, btGravar2, btAlterar2, btExcluir2, btLimpar2
                    setBotoesItem(true, false, true, true, true);
                }
                return;
            }
        });

Esse é o código que está rodando meia boca no programa. O problema é que quando estou editando um pedido novo esse código tem bug, mas quando carrego um pedido que já foi feito ele funciona perfeitamente. Outro problema, em qualquer situação parece que ele executa duas vezes. Por exemplo: a linha System.out.println("Linha do pedido: " + linha); é exibida duas vezes toda vez que eu clico em uma linha da tabela, não sei porque ele tem esse comportamento mas quer dizer que executou duas vezes o código, correto? Isto não me incomoda.

O que me incomoda é que toda vez que estou editando um pedido novo e quero alterar uma linha esse código só pega a ultima linha do pedido, não importando em qual linha eu clico. Por alguma razão não permite alterar ou excluir uma linha que não seja a última do pedido. Deve ser um erro de lógica, mas não consigo encontrar. Vou tentar mandar o programa inteiro, quem sabe você dando uma olhada mais detalhada consiga me dizer porque ele tem esse comportamento. Obrigado!

package view;

import dao.PedidosClienteDAO;
import empresaiv.BD;
import empresaiv.GuiMenuPrincipal;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import model.Clientes;
import model.ItensPedidoCliente;
import model.ItensPedidoClienteEstendida;
import model.PedidosCliente;
import model.Produtos;
import empresaiv.Util;

/**
 *
 * @author Ronaldo Rodrigues Godoi
 */
public class GuiPedidoCliente extends JPanel {
    
    ArrayList<ItensPedidoClienteEstendida> listaItens = new ArrayList<>();
    
    Util util = new Util();
    
    Date nova_data = new Date();
    DateFormat formatoData = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    
    JTextField tfId_pedido, tfId_cliente, tfId_endereco_entrega, 
            tfIdCondicao_pag, tfData_pedido, tfId_item, tfId_produto, tfQuantidade,
            tfPreco, tfData_entrega;
    
    JLabel lbTituloTela, lbId_pedido, lbId_cliente, lbId_endereco_entrega, 
            lbIdCondicao_pag, lbData_pedido, lbId_item, lbId_produto, lbQuantidade,
            lbPreco, lbData_entrega;
    
    JButton btSair, btNovo1, btGravar1, btAlterar1, btExcluir1, btNovo2, 
            btGravar2, btAlterar2, btExcluir2, btBaixarEstoque, btLocalizar,
            btLimpar, btLimpar2;
    
    int numeroItens, linha;
    
    JTable tbPedido;
    DefaultTableModel tableModel = new DefaultTableModel(new String[]{}, 0) {};
    JScrollPane scrollTable;
    String[] colunas = {"Id item", "Id produto",
        "Descrição do produto", "Quantidade",
        "Preco", "Total"};
    
    
    PedidosClienteDAO pedidosDAO;
    
    public GuiPedidoCliente() {
        
        inicializarComponentes();
        definirEventos();
        
    }
    
    private void inicializarComponentes() {
        
        setLayout(null);
        
        btSair = new JButton(" SAIR ");
        btNovo1 = new JButton(" Novo Pedido ");
        btGravar1 = new JButton(" Gravar Pedido");
        btAlterar1 = new JButton(" Gravar Alteração ");
        btExcluir1 = new JButton(" Excluir Pedido ");
        btLimpar = new JButton(" Limpar Dados ");

        btNovo2 = new JButton(" Novo Item ");
        btGravar2 = new JButton(" Gravar Item ");
        btAlterar2 = new JButton(" Alterar Item ");
        btExcluir2 = new JButton(" Excluir Item ");
        btLimpar2 = new JButton(" Limpar Item ");
        
        btBaixarEstoque = new JButton(" Baixar Estoque ");
        btLocalizar = new JButton(" Localizar ");
        
        lbTituloTela = new JLabel("Pedido a Cliente");
        lbId_pedido = new JLabel("Id do Pedido: ");
        lbId_cliente = new JLabel("Id do Cliente: ");
        lbId_endereco_entrega = new JLabel("Id do Endereço de entrega: ");
        lbIdCondicao_pag = new JLabel("Id da Condição de pagamento: ");
        lbData_pedido = new JLabel("Data do pedido: ");

        lbId_item = new JLabel("Id do Item: ");
        lbId_produto = new JLabel("Id do Produto: ");
        lbQuantidade = new JLabel("Quantidade: ");
        lbPreco = new JLabel("Preço: ");
        lbData_entrega = new JLabel("Data de entrega: ");
        
        tfId_pedido = new JTextField(10);
        tfId_cliente = new JTextField(10);
        tfId_endereco_entrega = new JTextField(10); 
        tfIdCondicao_pag = new JTextField(10);
        tfData_pedido = new JTextField(20);

        tfId_item = new JTextField(10);
        tfId_produto = new JTextField(10);
        tfQuantidade = new JTextField(10);
        tfPreco = new JTextField(10);
        tfData_entrega = new JTextField(20);
        
        
        lbTituloTela.setBounds(35, 25, 200, 25);
        lbId_pedido.setBounds(35, 80, 100, 25);
        lbId_cliente.setBounds(140, 80, 100, 25);
        lbId_endereco_entrega.setBounds(250, 80, 200, 25);
        lbIdCondicao_pag.setBounds(35, 140, 200, 25);
        lbData_pedido.setBounds(240, 140, 100, 25);
        
        lbId_item.setBounds(35, 250, 100, 25);
        lbId_produto.setBounds(140, 250, 100, 25);
        lbQuantidade.setBounds(245, 250, 110, 25);
        lbPreco.setBounds(360, 250, 50, 25);
        
        tfId_pedido.setBounds(35, 110, 100, 25);
        tfId_cliente.setBounds(140, 110, 100, 25);
        tfId_endereco_entrega.setBounds(250, 110, 100, 25);
        tfIdCondicao_pag.setBounds(35, 170, 100, 25);
        tfData_pedido.setBounds(240, 170, 150, 25);
        
        tfId_item.setBounds(35, 280, 100, 25);
        tfId_produto.setBounds(140, 280, 100, 25);
        tfQuantidade.setBounds(245, 280, 110, 25);
        tfPreco.setBounds(360, 280, 110, 25);
        
        btSair.setBounds(600, 25, 150, 25);
        btNovo1.setBounds(600, 100, 150, 25);
        btGravar1.setBounds(600, 130, 150, 25);
        btAlterar1.setBounds(600, 160, 150, 25);
        btExcluir1.setBounds(600, 190, 150, 25);
        btLocalizar.setBounds(790, 100, 150, 25);
        btLimpar.setBounds(790, 130, 150, 25);
        
        btNovo2.setBounds(500, 280, 130, 25);
        btGravar2.setBounds(660, 280, 130, 25);
        btAlterar2.setBounds(500, 310, 130, 25);
        btExcluir2.setBounds(660, 310, 130, 25);
        btLimpar2.setBounds(820, 280, 130, 25);
        
        btBaixarEstoque.setBounds(790, 25, 150, 25);
        
        scrollTable = new JScrollPane();
        scrollTable.setBounds(35, 350, 800, 380);
        for(int i = 0; i < 6; i++) {
            tableModel.addColumn(colunas[i]);
        }
        
        tbPedido = new JTable(tableModel);
        tbPedido.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        
        scrollTable.setViewportView(tbPedido);
        
        add(btSair);
        add(btNovo1);
        add(btGravar1);
        add(btAlterar1);
        add(btExcluir1);
        add(btNovo2);
        add(btGravar2);
        add(btAlterar2);
        add(btExcluir2);
        add(btBaixarEstoque);
        add(btLocalizar);
        add(btLimpar);
        add(btLimpar2);
        
        add(lbTituloTela);
        add(lbTituloTela);
        add(lbId_pedido);
        add(lbId_cliente);
        add(lbId_endereco_entrega);
        add(lbIdCondicao_pag);
        add(lbData_pedido);
        add(lbId_item);
        add(lbId_produto);
        add(lbQuantidade);
        add(lbPreco);
        add(lbData_entrega);
        
        add(tfId_pedido);
        add(tfId_cliente);
        add(tfId_endereco_entrega); 
        add(tfIdCondicao_pag);
        add(tfData_pedido);
        
        add(tfId_item);
        add(tfId_produto);
        add(tfQuantidade);
        add(tfPreco);
        add(tfData_entrega);
        
        add(scrollTable);
    
        pedidosDAO = new PedidosClienteDAO();
        setBotoesPedido(true, false, false, false, true, true, false);
        setBotoesItem(false);
        setTFPedido(false);
        setTFItem(false, false);
    }   

    private void definirEventos() {
        
        /*
        * Eventos do Cabeçalho do Pedido
        **/        
        btSair.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                GuiMenuPrincipal.liberaMenu();
                BD.getInstance().close();
                setVisible(false);
            }
        });
        
        btNovo1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                tableModel.setNumRows(0);
                numeroItens = 0;
                limparCamposPedido();
                limparCamposItem();
                setTFPedido(true);
                setTFItem(false, false);
                setBotoesItem(false);
                tfId_pedido.setEnabled(false);
            }
        });
        
        btLocalizar.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                int Id_pedido = Integer.parseInt(tfId_pedido.getText());
                setBotoesItem(false);
                setTFPedido(false);
                if(!pedidosDAO.localizarPedido(Id_pedido)) {
                    JOptionPane.showMessageDialog(null, "Pedido não cadastrado!");
                } else {
                    listaItens = pedidosDAO.carregarListaItens();  
                    if(listaItens.size() == 0) {
                        JOptionPane.showMessageDialog(null, "Pedido não tem itens cadastrados, exclua o pedido!");
                        btExcluir1.setEnabled(true);
                    } else {
                        tfId_pedido.setText(String.valueOf(pedidosDAO.pedidoCliente.getId()));
                        tfId_cliente.setText(pedidosDAO.pedidoCliente.getId_cliente());
                        tfId_endereco_entrega.setText(pedidosDAO.pedidoCliente.getId_endereco_entrega());
                        tfIdCondicao_pag.setText(pedidosDAO.pedidoCliente.getCondicao_pag());
                        tfData_pedido.setText("" + pedidosDAO.pedidoCliente.getData_pedido());
                        tableModel.setNumRows(0);
                        for(int i = 0; i < listaItens.size(); i++ ) {
                            tableModel.addRow(new Object[] {
                                listaItens.get(i).getId(),
                                listaItens.get(i).getId_produto(),
                                listaItens.get(i).getDescricao_produto(),
                                listaItens.get(i).getQuantidade(),
                                listaItens.get(i).getPreco(),
                                listaItens.get(i).getQuantidade() * listaItens.get(i).getPreco()
                            });
                        }
                        limparCamposItem();
                        // novo1, gravar1, alterar1, excluir1, localizar, limpar, baixarEstoque
                        setBotoesPedido(true, false, true, true, true, true, false);
                        //btNovo2, btGravar2, btAlterar2, btExcluir2, btLimpar2
                        setBotoesItem(true, false, false, false, false);
                        setTFPedido(true);
                        setTFItem(false, false);
                    }
                }
                return;
            }
        });
        
        btAlterar1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                pedidosDAO.pedidoCliente.setId(Integer.parseInt(tfId_pedido.getText()));
                pedidosDAO.pedidoCliente.setId_cliente(tfId_cliente.getText());
                pedidosDAO.pedidoCliente.setId_endereco_entrega(tfId_endereco_entrega.getText());
                pedidosDAO.pedidoCliente.setCondicao_pag(tfIdCondicao_pag.getText());
                try {
                    // Erro está aqui.
                    nova_data = formatoData.parse(tfData_pedido.getText());
                    java.sql.Date sqlData = new java.sql.Date(nova_data.getTime());
                    pedidosDAO.pedidoCliente.setData_pedido(sqlData);
                } catch (ParseException erro) {
                    JOptionPane.showMessageDialog(null, "Erro ao converter a data");
                    return;
                }
                if(!pedidosDAO.alterar1()) {
                    JOptionPane.showMessageDialog(null, "Problema para alterar cabeçalho do Pedido!");
                } else {
                    JOptionPane.showMessageDialog(null, "Cabeçalho do Pedido alterado com sucesso!");
                }
                return;
            }
        });
        
        btLimpar.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent e) {
               limparCamposPedido();
               // novo1, gravar1, alterar1, excluir1, localizar, limpar, baixarEstoque
               setBotoesPedido(true, false, false, false, true, true, false);
               setBotoesItem(false);
               setTFPedido(false);
               tfId_pedido.setEnabled(true);
               tableModel.setNumRows(0);
           }
        });
        
        btGravar1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                
                tableModel.setNumRows(0);
                
                pedidosDAO.pedidoCliente.setId_cliente(tfId_cliente.getText());
                pedidosDAO.pedidoCliente.setId_endereco_entrega(tfId_endereco_entrega.getText());
                pedidosDAO.pedidoCliente.setCondicao_pag(tfIdCondicao_pag.getText());
                
                try {
                    nova_data = formatoData.parse(tfData_pedido.getText());
                    java.sql.Date sqlData = new java.sql.Date(nova_data.getTime());
                    pedidosDAO.pedidoCliente.setData_pedido(sqlData);
                } catch (ParseException erro) {
                    JOptionPane.showMessageDialog(null, "Erro ao converter a data");
                    return;
                }
                if(!pedidosDAO.gravar1()) {
                    JOptionPane.showMessageDialog(null, "Erro. Pedido não gravado com sucesso!");
                    return;
                } else {
                    JOptionPane.showMessageDialog(null, "Pedido gravado com sucesso!");
                    tfId_pedido.setText(String.valueOf(pedidosDAO.pedidoCliente.getId()));
                    // novo1, gravar1, alterar1, excluir1, localizar, limpar, baixarEstoque
                    setBotoesPedido(false, false, true, true, false, false, false);
                    setBotoesItem(true, true, false, false, false);
                    setTFItem(false, false);
                    return;
                }
            }
        });
        
        btExcluir1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if(pedidosDAO.excluir1()) {
                    tableModel.setNumRows(0);
                    JOptionPane.showMessageDialog(null, "Pedido excluído com sucesso!");
                    limparCamposPedido();
                    // novo1, gravar1, alterar1, excluir1, localizar, limpar, baixarEstoque
                    setBotoesPedido(true, false, false, false, false, true, false);
                    setBotoesItem(false);
                } else {                   
                    JOptionPane.showMessageDialog(null, "Não consegui excluír pedido!");
                }
                return;
            }
        });
        
        /*
        * Eventos dos Itens do Pedido
        */
        btNovo2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                limparCamposItem();
                setTFItem(false, true);
                tfId_produto.requestFocus();
            }
        });
        
        tbPedido.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
            public void valueChanged(ListSelectionEvent e) { 
                linha = tbPedido.getSelectedRow();
                System.out.println("Linha do pedido: " + linha);
                if(linha != -1) {
                    tfId_item.setText(String.valueOf(listaItens.get(linha).getId()));
                    tfId_produto.setText(listaItens.get(linha).getId_produto());
                    tfQuantidade.setText(String.valueOf(listaItens.get(linha).getQuantidade()));
                    tfPreco.setText(String.valueOf(listaItens.get(linha).getPreco()));
                    setTFItem(false, true);
                    //btNovo2, btGravar2, btAlterar2, btExcluir2, btLimpar2
                    setBotoesItem(true, false, true, true, true);
                }
                return;
            }
        });
        
        btLimpar2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                limparCamposItem();
                //btNovo2, btGravar2, btAlterar2, btExcluir2, btLimpar2
                setBotoesItem(true, false, false, false, false);
                setTFItem(false, false);
                return;
            }
        });
        
        btAlterar2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Double quantidade = util.spaceToDouble(tfQuantidade.getText());
                if(quantidade <= 0) {
                    JOptionPane.showMessageDialog(null, "Quantidade não pode ser zero!");
                    tfQuantidade.requestFocus();
                    return;
                }
                Double preco = util.spaceToDouble(tfPreco.getText());
                if(preco <= 0) {
                    JOptionPane.showMessageDialog(null, "Preço não pode ser zero!");
                    tfPreco.requestFocus();
                    return;
                }
      
                pedidosDAO.itemPedidoClienteEstendida.setId_pedido_cli(pedidosDAO.pedidoCliente.getId());
                pedidosDAO.itemPedidoClienteEstendida.setId(Integer.parseInt(tfId_item.getText()));
                pedidosDAO.itemPedidoClienteEstendida.setId_produto(tfId_produto.getText());
                pedidosDAO.itemPedidoClienteEstendida.setQuantidade(quantidade);
                pedidosDAO.itemPedidoClienteEstendida.setPreco(preco);
                pedidosDAO.itemPedidoClienteEstendida.setDescricao_produto(pedidosDAO.produto.getDescricao());
                
                if(!pedidosDAO.alterar2()) {
                    JOptionPane.showMessageDialog(null, "Erro ao gravar alteração!");
                } else {
                    listaItens.get(linha).setId_produto(
                            pedidosDAO.itemPedidoClienteEstendida.getId_produto());
                    listaItens.get(linha).setQuantidade(
                            pedidosDAO.itemPedidoClienteEstendida.getQuantidade());
                    listaItens.get(linha).setPreco(
                            pedidosDAO.itemPedidoClienteEstendida.getPreco());
                    listaItens.get(linha).setDescricao_produto(pedidosDAO.produto.getDescricao());
                    
                    tableModel.setNumRows(0);
                    for(int i = 0; i < listaItens.size(); i++ ) {
                        tableModel.addRow(new Object[] {
                            listaItens.get(i).getId(),
                            listaItens.get(i).getId_produto(),
                            listaItens.get(i).getDescricao_produto(),
                            listaItens.get(i).getQuantidade(),
                            listaItens.get(i).getPreco(),
                            listaItens.get(i).getQuantidade() * listaItens.get(i).getPreco()
                        });
                    }
                    limparCamposItem();
                    //btNovo2, btGravar2, btAlterar2, btExcluir2, btLimpar2
                    setBotoesItem(true, false, false, false, false);
                    setTFPedido(true);
                    setTFItem(false, false);
                }
                return;
            }
        });
        
        tfId_produto.addFocusListener(new FocusAdapter() {
            public void focusLost(FocusEvent e) {
                if(!pedidosDAO.localizarProduto(tfId_produto.getText())) {
                    JOptionPane.showMessageDialog(null, "Produto não cadastrado!");
                    tfId_produto.requestFocus();
                    return;
                } else {
                    System.out.println("Preço de venda: " + pedidosDAO.produto.getPreco_venda());
                    tfPreco.setText(String.valueOf(pedidosDAO.produto.getPreco_venda()));
                    return;
                }
            }
        });
        
        btGravar2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                
                Double quantidade = util.spaceToDouble(tfQuantidade.getText());
                if(quantidade <= 0) {
                    JOptionPane.showMessageDialog(null, "Quantidade não pode ser zero!");
                    tfQuantidade.requestFocus();
                    return;
                }
                Double preco = util.spaceToDouble(tfPreco.getText());
                if(preco <= 0) {
                    JOptionPane.showMessageDialog(null, "Preço não pode ser zero!");
                    tfPreco.requestFocus();
                    return;
                }
                
                pedidosDAO.itemPedidoClienteEstendida.setId_pedido_cli(pedidosDAO.pedidoCliente.getId());
                pedidosDAO.itemPedidoClienteEstendida.setId_produto(tfId_produto.getText());
                pedidosDAO.itemPedidoClienteEstendida.setQuantidade(quantidade);
                pedidosDAO.itemPedidoClienteEstendida.setPreco(preco);
                pedidosDAO.itemPedidoClienteEstendida.setDescricao_produto(pedidosDAO.produto.getDescricao());
                
                if(pedidosDAO.gravar2()) {
                    tfId_item.setText(String.valueOf(pedidosDAO.itemPedidoClienteEstendida.getId()));
                    numeroItens++;
                    // novo1, gravar1, alterar1, excluir1, localizar, limpar, baixarEstoque
                    setBotoesPedido(true, false, true, true, true, true, true);
                    listaItens.add(pedidosDAO.itemPedidoClienteEstendida);
                    // Inserindo item de pedido de cliente na tabela de itens
                    int cont = listaItens.size() - 1;
                    tableModel.addRow(new Object[] {
                        listaItens.get(cont).getId(),
                        listaItens.get(cont).getId_produto(),
                        listaItens.get(cont).getDescricao_produto(),
                        listaItens.get(cont).getQuantidade(),
                        listaItens.get(cont).getPreco(),
                        listaItens.get(cont).getQuantidade() * listaItens.get(cont).getPreco()
                        });
                    JOptionPane.showMessageDialog(null, "Item gravado com sucesso!");
                    limparCamposItem();
                    setTFItem(false, false);
                } else {
                    JOptionPane.showMessageDialog(null, "Não consegui gravar o Item!");
                }
            }
        });
        
        btExcluir2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                pedidosDAO.itemPedidoClienteEstendida.setId(Integer.parseInt(tfId_item.getText()));
                if(!pedidosDAO.excluir2()) {
                    JOptionPane.showMessageDialog(null, "Problema ao excluir item!");
                } else {
                    listaItens.remove(linha);
                    tableModel.setNumRows(0);
                    for(int i = 0; i < listaItens.size(); i++ ) {
                        tableModel.addRow(new Object[] {
                            listaItens.get(i).getId(),
                            listaItens.get(i).getId_produto(),
                            listaItens.get(i).getDescricao_produto(),
                            listaItens.get(i).getQuantidade(),
                            listaItens.get(i).getPreco(),
                            listaItens.get(i).getQuantidade() * listaItens.get(i).getPreco()
                        });
                    }                    
                }
                return;
            }
        });
        
    }
    
    private void setBotoesPedido(boolean novo1, boolean gravar1, boolean alterar1,
            boolean excluir1, boolean localizar, boolean limpar, boolean baixarEstoque) {
        btNovo1.setEnabled(novo1);
        btGravar1.setEnabled(gravar1);
        btAlterar1.setEnabled(alterar1);
        btExcluir1.setEnabled(excluir1);
        btLocalizar.setEnabled(localizar);
        btLimpar.setEnabled(limpar);
        btBaixarEstoque.setEnabled(baixarEstoque);
    }
    
    private void setBotoesItem(boolean novo2, boolean gravar2, boolean alterar2,
            boolean excluir2, boolean limpar2) {
        btNovo2.setEnabled(novo2);
        btGravar2.setEnabled(gravar2);
        btAlterar2.setEnabled(alterar2);
        btExcluir2.setEnabled(excluir2);
        btLimpar2.setEnabled(limpar2);
    }
    
    private void setBotoesItem(boolean portas) {
        btNovo2.setEnabled(portas);
        btGravar2.setEnabled(portas);
        btAlterar2.setEnabled(portas);
        btExcluir2.setEnabled(portas);
        btLimpar2.setEnabled(portas);
    }
    
    private void setTFPedido(boolean portas) {
        //tfId_pedido.setEnabled(porta);
        tfId_cliente.setEnabled(portas);
        tfId_endereco_entrega.setEnabled(portas);
        tfIdCondicao_pag.setEnabled(portas);
        tfData_pedido.setEnabled(portas);
    }
    
    private void setTFItem(boolean portaId, boolean portaOutros) {
        tfId_item.setEnabled(portaId);
        tfId_produto.setEnabled(portaOutros);
        tfQuantidade.setEnabled(portaOutros);
        tfPreco.setEnabled(portaOutros);
    }
    
    public void limparCamposPedido() {
        tfId_pedido.setText("");
        tfId_cliente.setText("");
        tfId_endereco_entrega.setText(""); 
        tfIdCondicao_pag.setText("");
        nova_data = new Date();
        tfData_pedido.setText(formatoData.format(nova_data.getTime()));
        // novo1, gravar1, alterar1, excluir1, localizar, limpar, baixarEstoque
        setBotoesPedido(false, true, false, false, false, true, false);
        setBotoesItem(false);
    }
    
    public void limparCamposItem() {
        tfId_item.setText("");
        tfId_produto.setText("");
        tfQuantidade.setText("");
        tfPreco.setText("");
        setTFItem(false, true);
        setBotoesItem(true, true, false, false, false);
    }
    
}

Ao tratar o evento, você tem que pegar a linha selecionada a partir do próprio evento, assim:

tbPedido.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
    public void valueChanged(ListSelectionEvent e) {

        // a linha selecionada vem informada no próprio evento
        // é por isso que a gente chama de "tratar o evento"
        linha = e.getFirstIndex();
        System.out.println("Linha do pedido: " + linha);

        if (linha != -1) {
            // não fique chamado 300 vezes o listaItens.get(linha)
            // use uma variável local
            ItensPedidoClienteEstendida item = listaItens.get(linha);

            tfId_item.setText(String.valueOf(item.getId()));
            tfId_produto.setText(item.getId_produto());
            tfQuantidade.setText(String.valueOf(item.getQuantidade()));
            tfPreco.setText(String.valueOf(item.getPreco()));
            setTFItem(false, true);
            setBotoesItem(true, false, true, true, true);
        }
    }
});

Prezado Ronaldo, não é a primeira vez que te digo isso, procure utilizar as convenções de código Java.

Utilize nomes coerentes para as classes, atributos e métodos.

Utilize nomes de classe no singular.

Você não imagina o trabalho que é analisar os seus códigos.
Leva muito tempo para entender o que está fazendo pois sua nomenclatura segue um padrão que você inventou.

Não fique implementando lógica dentro das classes anônimas dos seus listeners, crie métodos com nomes legíveis para executar essas lógicas.

Eu dei uma refatorada no código da sua tela para ficar mais legível, ainda tem bastante coisa pra melhorar, mas assim já facilita um pouco.

Segue o código:

package view;

import dao.PedidosClienteDAO;
import empresaiv.BD;
import empresaiv.GuiMenuPrincipal;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import model.ItensPedidoClienteEstendida;
import empresaiv.Util;

/**
 * @author Ronaldo Rodrigues Godoi
 */
@SuppressWarnings("serial")
public class GuiPedidoCliente extends JPanel {

  // Não utilize DefaultTableModel
  // Crie o seu próprio TableModel
  private class ItemTableModel extends AbstractTableModel {

    // as colunas da JTable
    private final String[] COLUNAS = new String[] {
        "Id item",
        "Id produto",
        "Descrição do produto",
        "Quantidade",
        "Preco",
        "Total"
    };

    public void atualizar() {
      fireTableDataChanged();
    }

    // a JTable vai chamar este método para obter
    // a quantidade de colunas que ela tem que apresentar
    @Override
    public int getColumnCount() {
      return COLUNAS.length;
    }

    // a JTable vai chamar este método para obter
    // o nome da coluna informada
    @Override
    public String getColumnName(int col) {
      return COLUNAS[col];
    }

    // a JTable vai chamar este método para obter
    // o número de linhas que ela vai apresentar
    @Override
    public int getRowCount() {
      return listaItens.size();
    }

    // a JTable vai chamar este método para obter
    // o valor a ser apresentado na linha e coluna informados
    @Override
    public Object getValueAt(int lin, int col) {
      if (lin >= 0 && lin < listaItens.size()) {
        ItensPedidoClienteEstendida item = listaItens.get(lin);
        switch (col) {
          case 0:
            return item.getId();
          case 1:
            return item.getId_produto();
          case 2:
            return item.getDescricao_produto();
          case 3:
            return item.getQuantidade();
          case 4:
            return item.getPreco();
          case 5:
            return item.getQuantidade() * item.getPreco();
        }
      }
      return null;
    }
  }

  private List<ItensPedidoClienteEstendida> listaItens = new ArrayList<>();

  private Util util = new Util();

  private Date nova_data = new Date();

  private DateFormat formatoData = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

  private JTextField tfId_pedido;
  private JTextField tfId_cliente;
  private JTextField tfId_endereco_entrega;
  private JTextField tfIdCondicao_pag;
  private JTextField tfData_pedido;
  private JTextField tfId_item;
  private JTextField tfId_produto;
  private JTextField tfQuantidade;
  private JTextField tfPreco;
  private JTextField tfData_entrega;

  private JLabel lbTituloTela;
  private JLabel lbId_pedido;
  private JLabel lbId_cliente;
  private JLabel lbId_endereco_entrega;
  private JLabel lbIdCondicao_pag;
  private JLabel lbData_pedido;
  private JLabel lbId_item;
  private JLabel lbId_produto;
  private JLabel lbQuantidade;
  private JLabel lbPreco;
  private JLabel lbData_entrega;

  private JButton btSair;
  private JButton btNovo1;
  private JButton btGravar1;
  private JButton btAlterar1;
  private JButton btExcluir1;
  private JButton btNovo2;
  private JButton btGravar2;
  private JButton btAlterar2;
  private JButton btExcluir2;
  private JButton btBaixarEstoque;
  private JButton btLocalizar;
  private JButton btLimpar;
  private JButton btLimpar2;

  private int linha;

  private JTable tbPedido;

  private ItemTableModel tableModel = new ItemTableModel();

  private JScrollPane scrollTable;

  private PedidosClienteDAO pedidosDAO;

  public GuiPedidoCliente() {
    inicializarComponentes();
    definirEventos();
  }

  private void inicializarComponentes() {

    setLayout(null);

    btSair = new JButton(" SAIR ");
    btNovo1 = new JButton(" Novo Pedido ");
    btGravar1 = new JButton(" Gravar Pedido");
    btAlterar1 = new JButton(" Gravar Alteração ");
    btExcluir1 = new JButton(" Excluir Pedido ");
    btLimpar = new JButton(" Limpar Dados ");

    btNovo2 = new JButton(" Novo Item ");
    btGravar2 = new JButton(" Gravar Item ");
    btAlterar2 = new JButton(" Alterar Item ");
    btExcluir2 = new JButton(" Excluir Item ");
    btLimpar2 = new JButton(" Limpar Item ");

    btBaixarEstoque = new JButton(" Baixar Estoque ");
    btLocalizar = new JButton(" Localizar ");

    lbTituloTela = new JLabel("Pedido a Cliente");
    lbId_pedido = new JLabel("Id do Pedido: ");
    lbId_cliente = new JLabel("Id do Cliente: ");
    lbId_endereco_entrega = new JLabel("Id do Endereço de entrega: ");
    lbIdCondicao_pag = new JLabel("Id da Condição de pagamento: ");
    lbData_pedido = new JLabel("Data do pedido: ");

    lbId_item = new JLabel("Id do Item: ");
    lbId_produto = new JLabel("Id do Produto: ");
    lbQuantidade = new JLabel("Quantidade: ");
    lbPreco = new JLabel("Preço: ");
    lbData_entrega = new JLabel("Data de entrega: ");

    tfId_pedido = new JTextField(10);
    tfId_cliente = new JTextField(10);
    tfId_endereco_entrega = new JTextField(10);
    tfIdCondicao_pag = new JTextField(10);
    tfData_pedido = new JTextField(20);

    tfId_item = new JTextField(10);
    tfId_produto = new JTextField(10);
    tfQuantidade = new JTextField(10);
    tfPreco = new JTextField(10);
    tfData_entrega = new JTextField(20);


    lbTituloTela.setBounds(35, 25, 200, 25);
    lbId_pedido.setBounds(35, 80, 100, 25);
    lbId_cliente.setBounds(140, 80, 100, 25);
    lbId_endereco_entrega.setBounds(250, 80, 200, 25);
    lbIdCondicao_pag.setBounds(35, 140, 200, 25);
    lbData_pedido.setBounds(240, 140, 100, 25);

    lbId_item.setBounds(35, 250, 100, 25);
    lbId_produto.setBounds(140, 250, 100, 25);
    lbQuantidade.setBounds(245, 250, 110, 25);
    lbPreco.setBounds(360, 250, 50, 25);

    tfId_pedido.setBounds(35, 110, 100, 25);
    tfId_cliente.setBounds(140, 110, 100, 25);
    tfId_endereco_entrega.setBounds(250, 110, 100, 25);
    tfIdCondicao_pag.setBounds(35, 170, 100, 25);
    tfData_pedido.setBounds(240, 170, 150, 25);

    tfId_item.setBounds(35, 280, 100, 25);
    tfId_produto.setBounds(140, 280, 100, 25);
    tfQuantidade.setBounds(245, 280, 110, 25);
    tfPreco.setBounds(360, 280, 110, 25);

    btSair.setBounds(600, 25, 150, 25);
    btNovo1.setBounds(600, 100, 150, 25);
    btGravar1.setBounds(600, 130, 150, 25);
    btAlterar1.setBounds(600, 160, 150, 25);
    btExcluir1.setBounds(600, 190, 150, 25);
    btLocalizar.setBounds(790, 100, 150, 25);
    btLimpar.setBounds(790, 130, 150, 25);

    btNovo2.setBounds(500, 280, 130, 25);
    btGravar2.setBounds(660, 280, 130, 25);
    btAlterar2.setBounds(500, 310, 130, 25);
    btExcluir2.setBounds(660, 310, 130, 25);
    btLimpar2.setBounds(820, 280, 130, 25);

    btBaixarEstoque.setBounds(790, 25, 150, 25);

    scrollTable = new JScrollPane();
    scrollTable.setBounds(35, 350, 800, 380);

    tbPedido = new JTable(tableModel);
    tbPedido.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

    scrollTable.setViewportView(tbPedido);

    add(btSair);
    add(btNovo1);
    add(btGravar1);
    add(btAlterar1);
    add(btExcluir1);
    add(btNovo2);
    add(btGravar2);
    add(btAlterar2);
    add(btExcluir2);
    add(btBaixarEstoque);
    add(btLocalizar);
    add(btLimpar);
    add(btLimpar2);

    add(lbTituloTela);
    add(lbTituloTela);
    add(lbId_pedido);
    add(lbId_cliente);
    add(lbId_endereco_entrega);
    add(lbIdCondicao_pag);
    add(lbData_pedido);
    add(lbId_item);
    add(lbId_produto);
    add(lbQuantidade);
    add(lbPreco);
    add(lbData_entrega);

    add(tfId_pedido);
    add(tfId_cliente);
    add(tfId_endereco_entrega);
    add(tfIdCondicao_pag);
    add(tfData_pedido);

    add(tfId_item);
    add(tfId_produto);
    add(tfQuantidade);
    add(tfPreco);
    add(tfData_entrega);

    add(scrollTable);

    pedidosDAO = new PedidosClienteDAO();
    setBotoesPedido(true, false, false, false, true, true, false);
    setBotoesItem(false);
    setTFPedido(false);
    setTFItem(false, false);
  }

  private void definirEventos() {
    /*
     * Eventos do Cabeçalho do Pedido
     */
    btSair.addActionListener(e -> sair());
    btNovo1.addActionListener(e -> novo());
    btLocalizar.addActionListener(e -> localizar());
    btAlterar1.addActionListener(e -> alterar());
    btLimpar.addActionListener(e -> limpar());
    btGravar1.addActionListener(e -> gravar());
    btExcluir1.addActionListener(e -> excluir());

    /*
     * Eventos dos Itens do Pedido
     */
    btNovo2.addActionListener(e -> novoItem());
    tbPedido.getSelectionModel().addListSelectionListener(e -> selecionarItem(e.getFirstIndex()));
    btLimpar2.addActionListener(e -> limparItem());
    btAlterar2.addActionListener(e -> alterarItem());
    tfId_produto.addFocusListener(new FocusAdapter() {
      @Override
      public void focusLost(FocusEvent e) {
        localizarProduto();
      }
    });
    btGravar2.addActionListener(e -> gravarItem());
    btExcluir2.addActionListener(e -> excluirItem());
  }

  private void setBotoesPedido(boolean novo1, boolean gravar1, boolean alterar1,
      boolean excluir1, boolean localizar, boolean limpar, boolean baixarEstoque) {
    btNovo1.setEnabled(novo1);
    btGravar1.setEnabled(gravar1);
    btAlterar1.setEnabled(alterar1);
    btExcluir1.setEnabled(excluir1);
    btLocalizar.setEnabled(localizar);
    btLimpar.setEnabled(limpar);
    btBaixarEstoque.setEnabled(baixarEstoque);
  }

  private void setBotoesItem(boolean novo2, boolean gravar2, boolean alterar2,
      boolean excluir2, boolean limpar2) {
    btNovo2.setEnabled(novo2);
    btGravar2.setEnabled(gravar2);
    btAlterar2.setEnabled(alterar2);
    btExcluir2.setEnabled(excluir2);
    btLimpar2.setEnabled(limpar2);
  }

  private void setBotoesItem(boolean portas) {
    btNovo2.setEnabled(portas);
    btGravar2.setEnabled(portas);
    btAlterar2.setEnabled(portas);
    btExcluir2.setEnabled(portas);
    btLimpar2.setEnabled(portas);
  }

  private void setTFPedido(boolean portas) {
    // tfId_pedido.setEnabled(porta);
    tfId_cliente.setEnabled(portas);
    tfId_endereco_entrega.setEnabled(portas);
    tfIdCondicao_pag.setEnabled(portas);
    tfData_pedido.setEnabled(portas);
  }

  private void setTFItem(boolean portaId, boolean portaOutros) {
    tfId_item.setEnabled(portaId);
    tfId_produto.setEnabled(portaOutros);
    tfQuantidade.setEnabled(portaOutros);
    tfPreco.setEnabled(portaOutros);
  }

  public void limparCamposPedido() {
    tfId_pedido.setText("");
    tfId_cliente.setText("");
    tfId_endereco_entrega.setText("");
    tfIdCondicao_pag.setText("");
    nova_data = new Date();
    tfData_pedido.setText(formatoData.format(nova_data.getTime()));
    // novo1, gravar1, alterar1, excluir1, localizar, limpar, baixarEstoque
    setBotoesPedido(false, true, false, false, false, true, false);
    setBotoesItem(false);
  }

  public void limparCamposItem() {
    tfId_item.setText("");
    tfId_produto.setText("");
    tfQuantidade.setText("");
    tfPreco.setText("");
    setTFItem(false, true);
    setBotoesItem(true, true, false, false, false);
  }

  private void sair() {
    GuiMenuPrincipal.liberaMenu();
    BD.getInstance().close();
    setVisible(false);
  }

  private void novo() {
    tableModel.atualizar();
    limparCamposPedido();
    limparCamposItem();
    setTFPedido(true);
    setTFItem(false, false);
    setBotoesItem(false);
    tfId_pedido.setEnabled(false);
  }

  private void localizar() {
    int Id_pedido = Integer.parseInt(tfId_pedido.getText());
    setBotoesItem(false);
    setTFPedido(false);
    if (!pedidosDAO.localizarPedido(Id_pedido)) {
      JOptionPane.showMessageDialog(this, "Pedido não cadastrado!");
    } else {
      listaItens = pedidosDAO.carregarListaItens();
      if (listaItens.size() == 0) {
        JOptionPane.showMessageDialog(this, "Pedido não tem itens cadastrados, exclua o pedido!");
        btExcluir1.setEnabled(true);
      } else {
        tfId_pedido.setText(String.valueOf(pedidosDAO.pedidoCliente.getId()));
        tfId_cliente.setText(pedidosDAO.pedidoCliente.getId_cliente());
        tfId_endereco_entrega.setText(pedidosDAO.pedidoCliente.getId_endereco_entrega());
        tfIdCondicao_pag.setText(pedidosDAO.pedidoCliente.getCondicao_pag());
        tfData_pedido.setText("" + pedidosDAO.pedidoCliente.getData_pedido());
        tableModel.atualizar();
        limparCamposItem();
        // novo1, gravar1, alterar1, excluir1, localizar, limpar, baixarEstoque
        setBotoesPedido(true, false, true, true, true, true, false);
        // btNovo2, btGravar2, btAlterar2, btExcluir2, btLimpar2
        setBotoesItem(true, false, false, false, false);
        setTFPedido(true);
        setTFItem(false, false);
      }
    }
  }

  private void alterar() {
    pedidosDAO.pedidoCliente.setId(Integer.parseInt(tfId_pedido.getText()));
    pedidosDAO.pedidoCliente.setId_cliente(tfId_cliente.getText());
    pedidosDAO.pedidoCliente.setId_endereco_entrega(tfId_endereco_entrega.getText());
    pedidosDAO.pedidoCliente.setCondicao_pag(tfIdCondicao_pag.getText());
    try {
      // Erro está aqui.
      nova_data = formatoData.parse(tfData_pedido.getText());
      java.sql.Date sqlData = new java.sql.Date(nova_data.getTime());
      pedidosDAO.pedidoCliente.setData_pedido(sqlData);
    } catch (ParseException erro) {
      JOptionPane.showMessageDialog(this, "Erro ao converter a data");
      return;
    }
    if (!pedidosDAO.alterar1()) {
      JOptionPane.showMessageDialog(this, "Problema para alterar cabeçalho do Pedido!");
    } else {
      JOptionPane.showMessageDialog(this, "Cabeçalho do Pedido alterado com sucesso!");
    }
  }

  private void limpar() {
    limparCamposPedido();
    // novo1, gravar1, alterar1, excluir1, localizar, limpar, baixarEstoque
    setBotoesPedido(true, false, false, false, true, true, false);
    setBotoesItem(false);
    setTFPedido(false);
    tfId_pedido.setEnabled(true);
    tableModel.atualizar();
  }

  private void gravar() {
    tableModel.atualizar();

    pedidosDAO.pedidoCliente.setId_cliente(tfId_cliente.getText());
    pedidosDAO.pedidoCliente.setId_endereco_entrega(tfId_endereco_entrega.getText());
    pedidosDAO.pedidoCliente.setCondicao_pag(tfIdCondicao_pag.getText());

    try {
      nova_data = formatoData.parse(tfData_pedido.getText());
      java.sql.Date sqlData = new java.sql.Date(nova_data.getTime());
      pedidosDAO.pedidoCliente.setData_pedido(sqlData);
    } catch (ParseException erro) {
      JOptionPane.showMessageDialog(this, "Erro ao converter a data");
      return;
    }
    if (!pedidosDAO.gravar1()) {
      JOptionPane.showMessageDialog(this, "Erro. Pedido não gravado com sucesso!");
      return;
    } else {
      JOptionPane.showMessageDialog(this, "Pedido gravado com sucesso!");
      tfId_pedido.setText(String.valueOf(pedidosDAO.pedidoCliente.getId()));
      // novo1, gravar1, alterar1, excluir1, localizar, limpar, baixarEstoque
      setBotoesPedido(false, false, true, true, false, false, false);
      setBotoesItem(true, true, false, false, false);
      setTFItem(false, false);
      return;
    }
  }

  private void excluir() {
    if (pedidosDAO.excluir1()) {
      tableModel.atualizar();
      JOptionPane.showMessageDialog(this, "Pedido excluído com sucesso!");
      limparCamposPedido();
      // novo1, gravar1, alterar1, excluir1, localizar, limpar, baixarEstoque
      setBotoesPedido(true, false, false, false, false, true, false);
      setBotoesItem(false);
    } else {
      JOptionPane.showMessageDialog(this, "Não consegui excluír pedido!");
    }
  }

  private void novoItem() {
    limparCamposItem();
    setTFItem(false, true);
    tfId_produto.requestFocus();
  }

  private void selecionarItem(int linhaSelecionada) {
    linha = linhaSelecionada;
    System.out.println("Linha do pedido: " + linha);
    if (linha != -1) {
      tfId_item.setText(String.valueOf(listaItens.get(linha).getId()));
      tfId_produto.setText(listaItens.get(linha).getId_produto());
      tfQuantidade.setText(String.valueOf(listaItens.get(linha).getQuantidade()));
      tfPreco.setText(String.valueOf(listaItens.get(linha).getPreco()));
      setTFItem(false, true);
      // btNovo2, btGravar2, btAlterar2, btExcluir2, btLimpar2
      setBotoesItem(true, false, true, true, true);
    }
  }

  private void limparItem() {
    limparCamposItem();
    // btNovo2, btGravar2, btAlterar2, btExcluir2, btLimpar2
    setBotoesItem(true, false, false, false, false);
    setTFItem(false, false);
  }

  private void alterarItem() {
    Double quantidade = util.spaceToDouble(tfQuantidade.getText());
    if (quantidade <= 0) {
      JOptionPane.showMessageDialog(this, "Quantidade não pode ser zero!");
      tfQuantidade.requestFocus();
      return;
    }
    Double preco = util.spaceToDouble(tfPreco.getText());
    if (preco <= 0) {
      JOptionPane.showMessageDialog(this, "Preço não pode ser zero!");
      tfPreco.requestFocus();
      return;
    }

    // não acesso 300 vezes o pedidosDAO.itemPedidoClienteEstendida
    // use variável local
    ItensPedidoClienteEstendida item = pedidosDAO.itemPedidoClienteEstendida;

    item.setId_pedido_cli(pedidosDAO.pedidoCliente.getId());
    item.setId(Integer.parseInt(tfId_item.getText()));
    item.setId_produto(tfId_produto.getText());
    item.setQuantidade(quantidade);
    item.setPreco(preco);
    item.setDescricao_produto(pedidosDAO.produto.getDescricao());

    if (!pedidosDAO.alterar2()) {
      JOptionPane.showMessageDialog(this, "Erro ao gravar alteração!");
    } else {
      tableModel.atualizar();
      limparCamposItem();
      // btNovo2, btGravar2, btAlterar2, btExcluir2, btLimpar2
      setBotoesItem(true, false, false, false, false);
      setTFPedido(true);
      setTFItem(false, false);
    }
  }

  private void localizarProduto() {
    if (!pedidosDAO.localizarProduto(tfId_produto.getText())) {
      JOptionPane.showMessageDialog(this, "Produto não cadastrado!");
      tfId_produto.requestFocus();
      return;
    } else {
      System.out.println("Preço de venda: " + pedidosDAO.produto.getPreco_venda());
      tfPreco.setText(String.valueOf(pedidosDAO.produto.getPreco_venda()));
      return;
    }
  }

  private void gravarItem() {
    Double quantidade = util.spaceToDouble(tfQuantidade.getText());
    if (quantidade <= 0) {
      JOptionPane.showMessageDialog(this, "Quantidade não pode ser zero!");
      tfQuantidade.requestFocus();
      return;
    }
    Double preco = util.spaceToDouble(tfPreco.getText());
    if (preco <= 0) {
      JOptionPane.showMessageDialog(this, "Preço não pode ser zero!");
      tfPreco.requestFocus();
      return;
    }

    // não acesse 300 vezes o pedidosDAO.itemPedidoClienteEstendida
    // use variável local
    ItensPedidoClienteEstendida item = pedidosDAO.itemPedidoClienteEstendida;

    item.setId_pedido_cli(pedidosDAO.pedidoCliente.getId());
    item.setId_produto(tfId_produto.getText());
    item.setQuantidade(quantidade);
    item.setPreco(preco);
    item.setDescricao_produto(pedidosDAO.produto.getDescricao());

    if (pedidosDAO.gravar2()) {
      tfId_item.setText(String.valueOf(item.getId()));
      // novo1, gravar1, alterar1, excluir1, localizar, limpar, baixarEstoque
      setBotoesPedido(true, false, true, true, true, true, true);
      listaItens.add(item);
      tableModel.atualizar();
      JOptionPane.showMessageDialog(this, "Item gravado com sucesso!");
      limparCamposItem();
      setTFItem(false, false);
    } else {
      JOptionPane.showMessageDialog(this, "Não consegui gravar o Item!");
    }
  }

  private void excluirItem() {
    pedidosDAO.itemPedidoClienteEstendida.setId(Integer.parseInt(tfId_item.getText()));
    if (!pedidosDAO.excluir2()) {
      JOptionPane.showMessageDialog(this, "Problema ao excluir item!");
    } else {
      listaItens.remove(linha);
      tableModel.atualizar();
    }
  }
}
1 curtida

Staroski, obrigado! Não fique chateado com relação aos nomes de classes pois como eu já disse: não foi eu quem inventou, eu aprendi de um livro da editora Érica. O nome da classe é no plural mas o objeto é no singular, não é difícil.

Estás usando um livro que te ensina más práticas, acontece.
Há muitos livros que são péssimos, um dos piores que já vi foi o “Java para Dummies”.
Seria interessante compartilhar o nome, autor e edição desse livro que estás usando pro pessoal ver e avaliar.

Já percebeu que praticamente apenas eu respondo suas dúvidas?
Acredito que um dos motivos é o seu código ser muito “diferentão” aí muitos colegas preferem não se dar ao trabalho de analisar o fonte para te responder.

Uma citação muito conhecida do Martin Fowler diz o seguinte:
"Qualquer tolo consegue escrever código que um computador entenda.
Bons programadores escrevem código que humanos possam entender".

Entenda que os comentários não são por mal, a ideia é fazer você se tornar um programador melhor, mas você e nunca altera nada e olha que qualquer IDE moderna tem ferramentas para refatorar nomes de classes e membros.

Nomes no plural são apenas para coleções, para arrays ou para classes onde uma única instância dela vá representar vários objetos, o que nitidamente não é o caso nesse seu sistema.
Antigamente alguns autores gostavam de nomear as classes com o mesmo nome das tabelas do banco de dados.
Tabelas fazem sentido ter nome no plural, pois elas armazenam vários registros, mas uma classe não é uma tabela, mesmo que ela possa ser utilizada para manipular registros de uma tabela.

Além do mais não é só o nome das classes que está confuso.
Você alterna os seus padrões constantemente nos nomes de variáveis.

Às vezes você usa o camelCase, que é o recomendado:

btBaixarEstoque
btLocalizar
btLimpar

Mas outras vezes você usa sublinha como separador de palavras:

lbId_pedido
lbId_cliente
lbId_endereco_entrega

Às vezes você usa nomes por extenso:

tfId_endereco_entrega

Outras vezes você abrevia:

tfIdCondicao_pag

Você não segue nenhum padrão.

Nos nomes de classe, qual a diferença entre um ItensPedidoCliente e um ItensPedidoClienteEstendida?

Já com nomes de métodos, percebo que você não costuma usar nomes que descrevam o que o método realmente faz, por exemplo na classe PedidosClienteDAO você tem os seguintes métodos:

alterar1()
gravar1()
excluir1()
alterar2()
gravar2()
excluir2()

Pra quem bate o olho no seu código, não dá pra ter a menor ideia do que faz um alterar1() e um alterar2().

Outro exemplo ainda na classe PedidosClienteDAO são os seguintes métodos:

boolean localizarPedido
boolean localizarProduto

Se o método localizarPedidolocaliza um Pedido então o retorno dele deveria ser um objeto do tipo Pedido e não um boolean.

Mesma coisa para o método localizarProduto, ele deveria retornar um objeto do tipo Produto e não um boolean.

Aí você pode questionar: “Ah mas se não encontrar o objeto?”
R: Aí você decide se o melhor é retornar null ou lançar uma exceção para quem chamou o método poder tratar.

Ainda na classe PedidosClienteDAO ela deveria manipular somente a classe Pedidos mas ela manipula de tudo.
Outra má prática é que ela tem uma série de atributos públicos, o que não faz sentido, cadê o encapsulamento?

Falando em encapsulamento, você também tem o hábito de não usar modificador de acesso quando declara variáveis de instância.

Dica:
Quando não sabe que modificador usar, utiliza private.
Você só vai usar o public, protected e default (nenhum modificador) em situações específicas onde fará sentido uma outra classe “enxergar” aquele membro.

O mesmo vale para membros static, você só vai usar em situações bastante específicas.
Tudo o que é static pertence à classe e não ao objeto.

Por exemplo porque a classe GuiMenuPrincipal tem um método static chamado liberaMenu?

Se esse método precisa ser acessado por outras telas do sistema, então você precisa passar para essas telas uma referência ao objeto GuiMenuPrincipal que você criou, uma boa forma de fazer isso é passar pelo próprio construtor da tela.

Particularmente acho que essa é sua maior dificuldade:
Entender como objetos conversam entre si e que um mesmo objeto pode ser referenciado e manipulado de diversos lugares diferentes.
Isso você só aprende estudando sobre troca de mensagens e passagem de parâmetros.

1 curtida