[RESOLVIDO] Seleção do checkBox só retorna um valor

Boa noite,

Meu problema é o seguinte, fiz uma pesquisa sobre como fazer o checkBox no JTable e consegui fazer, aí blz.
Quando clicar no botão “Calcular” tem que gerar a soma dos valores das próteses selecionadas, porém quando seleciono as duas (só adicionei duas para testes) aparece o valor da primeira linha. Selecionei só a segunda linha e fica 0.0

Não está gerando nenhum erro no console do eclipse (estranho rs)

À partir da linha 174 começa o actionPerformed

[code]package br.com.telas;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableModel;

import br.com.bean.Pedido;
import br.com.bean.TabeladePreco;
import br.com.dao.TabeladePrecoDao;
import br.com.exception.DaoException;
import br.com.telas.CadPedido;
import javax.swing.JTextField;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class TabelaCarrinho extends JDialog {

final JPanel lista = new JPanel();	
private JTable table;
private static final long serialVersionUID = 1L;

private TabeladePrecoDao tabDao = new TabeladePrecoDao();
private JTextField textValorProt;
private JTextField textValorServ;

private Double valorServ, valorProt, pedidoTotal;
private JTextField textField;
private boolean check = false;

public TabelaCarrinho() throws DaoException {
	/*setBounds(100, 100, 450, 300);
	getContentPane().setLayout(new BorderLayout());
	contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
	getContentPane().add(contentPanel, BorderLayout.CENTER);
	contentPanel.setLayout(null);*/
	setIconImage(Toolkit.getDefaultToolkit().getImage(CadPedido.class.getResource("/br/com/images/logo_transp.png")));
	setTitle("Seleção de Próteses");
	//setIconImage(Toolkit.getDefaultToolkit().getImage(CadFuncionario.class.getResource("/br/com/images/cadForm.jpg")));
	int width = 800;
    int height =600;
   // setModal(true);
    Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (screen.width-width)/2;
    int y = (screen.height-height)/3;
    setBounds(x,y,821,600);
    getContentPane().setLayout(null);
    
    final JPanel buttonPanel = new JPanel();
    buttonPanel.setBackground(UIManager.getColor("Button.background"));
    buttonPanel.setBounds(0, 0, 152, 562);
    getContentPane().add(buttonPanel);
    buttonPanel.setLayout(null);
    
    lista.setBounds(152, 0, 656, 562);
    getContentPane().add(lista);
    lista.setLayout(null);
    
    JLabel lblFuncionriosCadastrados = new JLabel("Selecione as Próteses");
    lblFuncionriosCadastrados.setFont(new Font("Kalinga", Font.BOLD, 16));
    lblFuncionriosCadastrados.setHorizontalAlignment(SwingConstants.CENTER);
    lblFuncionriosCadastrados.setBackground(Color.WHITE);
    lblFuncionriosCadastrados.setBounds(10, 11, 612, 29);
    lista.add(lblFuncionriosCadastrados);
           
    lista.setVisible(true);  
    table = new JTable();
    table.addMouseListener(new MouseListener() {
		
		@Override
		public void mouseReleased(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void mousePressed(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void mouseExited(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void mouseEntered(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseClicked(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}

	}
);
       
	
	 Object[] columnNames = {"Número", "Nome", "Tipo", "Preço", "Selecione"};
        Object[][] data = {	            
        };
        DefaultTableModel model = new DefaultTableModel(data, columnNames);
        table = new JTable(model) {

            private static final long serialVersionUID = 1L;

            /*@Override
            public Class getColumnClass(int column) {
            return getValueAt(0, column).getClass();
            }*/
            @Override
            public Class getColumnClass(int column) {
                switch (column) {
                    case 0:
                        return String.class;
                    case 1:
                        return String.class;
                    case 2:
                        return String.class;
                    case 3:
                        return String.class;
                    default:
                        return Boolean.class;
                }
            }
        };
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        JScrollPane scrollPane = new JScrollPane(table);
        scrollPane.setBounds(0, 50, 636, 423);
        lista.add(scrollPane);
        table.getColumnModel().getColumn(0).setPreferredWidth(55);
        table.getColumnModel().getColumn(0).setMinWidth(55);
        table.getColumnModel().getColumn(1).setPreferredWidth(200);
        table.getColumnModel().getColumn(1).setMinWidth(200);
        table.getColumnModel().getColumn(2).setPreferredWidth(80);
        table.getColumnModel().getColumn(2).setMinWidth(80);
        table.getColumnModel().getColumn(3).setPreferredWidth(100);
        table.getColumnModel().getColumn(3).setMinWidth(100);
        table.getColumnModel().getColumn(4).setPreferredWidth(100);
        table.getColumnModel().getColumn(4).setMinWidth(100);
        table.setBounds(39, 175, 530, 232);
        atualizaLista(table,"");
        
                       scrollPane.setViewportView(table);
                       
                       JButton btnCalcular = new JButton("Calcular");
                       btnCalcular.addActionListener(new ActionListener() {
                    	   /**
                    	    * Soma os preços das próteses que foram selecionadas
                    	    */
                       	public void actionPerformed(ActionEvent e) {	                       		
                       		//int linha;
                       		int i=0;
                       		Boolean checados;
                       		Double prec = 0.0;
                       		Double precoProtese = 0.0 ;
                       		do{
                       			checados = new Boolean(table.getValueAt(i, 4).toString());
                       			if(checados==true){
                       			//	linha = table.getSelectedRow();
                       				String preco = (String) table.getValueAt(i,3);
    	            				prec = Double.parseDouble(preco);
    	            				precoProtese = precoProtese + prec;
    	            				
                                                    i++;
                       			}else{
                       				check = false;
                       			}
                       			//i++;
                       		}while(check==true);
                       	
                       		textValorProt.setText(String.valueOf(precoProtese));
                       	}
                       	} );
                       btnCalcular.setBounds(10, 484, 89, 23);
                       lista.add(btnCalcular);
                       
                       textValorProt = new JTextField();
                       textValorProt.setBounds(120, 531, 86, 20);
                       lista.add(textValorProt);
                       textValorProt.setColumns(10);
                       
                       JLabel lblSoma = new JLabel("Valor Pr\u00F3tese(s):");
                       lblSoma.setBounds(10, 534, 106, 14);
                       lista.add(lblSoma);
                       
                       textValorServ = new JTextField();
                       textValorServ.setBounds(295, 531, 86, 20);
                       lista.add(textValorServ);
                       textValorServ.setColumns(10);
                       
                       JLabel lblService = new JLabel("Servi\u00E7o:");
                       lblService.setBounds(233, 534, 72, 14);
                       lista.add(lblService);
                       
                       JButton btnSo = new JButton("Somar");
                       btnSo.addActionListener(new ActionListener() {
                    	   /**
                    	    * Soma o valor total do pedido com o serviço do protético
                    	    */
                       	public void actionPerformed(ActionEvent arg0) {
                       		Pedido obj = new Pedido();
                       		valorServ = Double.parseDouble(textValorServ.getText());
                          	valorProt = Double.parseDouble(textValorProt.getText());
                          		pedidoTotal = valorServ + valorProt;
                          		textField.setText(String.valueOf(pedidoTotal));
                          		obj.setTotalPedido(Double.parseDouble(textField.getText()));
                       	}
                       });
                       btnSo.setBounds(415, 530, 89, 23);
                       lista.add(btnSo);
                       
                       textField = new JTextField();
                       textField.setBounds(520, 531, 86, 20);
                       lista.add(textField);
                       textField.setColumns(10);
              
    }

public void atualizaLista(JTable lista, String nome) throws DaoException{
	
	DefaultTableModel dtm = (DefaultTableModel) table.getModel();      			

	
	 dtm.setRowCount(0); 
		List<TabeladePreco> listaTab  = new ArrayList<TabeladePreco>();
		listaTab = tabDao.consultarProteses(nome);
 		String dados[] = new String[4]; 
		for (TabeladePreco obj : listaTab) {
			dados[0] = String.valueOf(obj.getNumProtese()) ;
			dados[1] = obj.getNomeProtese();
			dados[2] = obj.getTipoProtese();
			dados[3] = String.valueOf(obj.getPrecoProtese());
			
				((DefaultTableModel) table.getModel()).addRow(dados); 
	} 
	table.repaint();
}

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
            	TabelaCarrinho frame;
				try {
					frame = new TabelaCarrinho();
					frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);		 
					frame.setVisible(true);
				} catch (DaoException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}					
                
            }
        });
    }

}
[/code]

Boa noite

Acho melhor vc deixar de lado esta DefaultTableModel e escrever seu próprio modelo de tabela:


http://www.guj.com.br/articles/147

Tem alguma coisa errada neste do/while, não cheguei a compilar seu código

        Boolean checados;  
        Double prec = 0.0;  
        Double precoProtese = 0.0 ;  

         for(int i=0;i < dados.length;i++){
                                    
             checados = new Boolean(table.getValueAt(i, 4).toString());  

              if(checados==true){  
                      String preco = (String) table.getValueAt(i,3);  
                       prec = Double.parseDouble(preco);  
                       precoProtese = precoProtese + prec;  
                   } 
          }
                              
                                textValorProt.setText(String.valueOf(precoProtese));  

tenta usar assim :wink:

[quote=BTO]Boa noite

Acho melhor vc deixar de lado esta DefaultTableModel e escrever seu próprio modelo de tabela:


http://www.guj.com.br/articles/147

Tem alguma coisa errada neste do/while, não cheguei a compilar seu código

        Boolean checados;  
        Double prec = 0.0;  
        Double precoProtese = 0.0 ;  

         for(int i=0;i < dados.length;i++){
                                    
             checados = new Boolean(table.getValueAt(i, 4).toString());  

              if(checados==true){  
                      String preco = (String) table.getValueAt(i,3);  
                       prec = Double.parseDouble(preco);  
                       precoProtese = precoProtese + prec;  
                   } 
          }
                              
                                textValorProt.setText(String.valueOf(precoProtese));  

tenta usar assim ;)[/quote]

Obrigada BTO, vou dar uma lida nesses materiais (;

Não funcionou com esse trecho que você passou, não executou a soma

Boa noite

Então consegui resolver, adaptei o código para testar e separei algumas coisas, para eventos “ActionListeners” aconselho criar classes ouvintes, seu código ficará fácil de manter.

JavaBean que usei para teste

package br.com.telas;

public class Proteses {
 	
	private int numero;
	private String nome;
	private String tipo;
	private Double preco;
	private boolean selecione;
	
	public int getNumero() {
		return numero;
	}
	public void setNumero(int numero) {
		this.numero = numero;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getTipo() {
		return tipo;
	}
	public void setTipo(String tipo) {
		this.tipo = tipo;
	}
	public Double getPreco() {
		return preco;
	}
	public void setPreco(Double preco) {
		this.preco = preco;
	}
	public boolean isSelecione() {
		return selecione;
	}
	public void setSelecione(boolean selecione) {
		this.selecione = selecione;
	}
	
	
}

Table Model

package br.com.telas;

import java.util.List;

import javax.swing.table.AbstractTableModel;

public class ProtesesTableModel extends AbstractTableModel {
	
	/**
	 * constantes do indice colunas
	 */
	private final int NUMERO=0;
	private final int NOME=1;
	private final int TIPO=2;
	private final int PRECO=3;
	private final int SELECIONE=4;
	
	private String[] columnNames = {"Número", "Nome", "Tipo", "Preço", "Selecione"};
	private List<Proteses> proteses;
	
	public List<Proteses> getProteses() {
		return proteses;
	}

	public ProtesesTableModel(List<Proteses> proteses) {
		this.proteses=proteses;
	}
	
	@Override
	public int getColumnCount() {
		return columnNames.length;
	}

	@Override
	public int getRowCount() {
		return proteses.size();
	}

    @Override
    public String getColumnName(int column) {
        return columnNames[column];
    }
	
	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		Proteses protese=proteses.get(rowIndex);
		
			switch (columnIndex) {
			case NUMERO:
				return protese.getNumero();
			case NOME:
				return protese.getNome();
			case TIPO:
				return protese.getTipo();
			case PRECO:
				return protese.getPreco();
			case SELECIONE:
				return protese.isSelecione();
			default:
				throw new IndexOutOfBoundsException("Coluna não existe, fora dos indice!");
			}
		
	}
	
	 @Override
     public Class getColumnClass(int column) {
		 switch (column) {
             case NUMERO:
                 return String.class;
             case NOME:
                 return String.class;
             case TIPO:
                 return String.class;
             case PRECO:
                 return String.class;
             case SELECIONE:
                 return Boolean.class;
             default:
		 throw new IndexOutOfBoundsException("Coluna não existe, fora dos indice!");
         }
		
     }
	
	 @Override
	    public boolean isCellEditable(int rowIndex, int columnIndex) {
	        // apenas o campo "ATIVO" será editável
	        return columnIndex == SELECIONE;
	    }
	 
	    @Override
	    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
	        // Pega o sócio referente a linha especificada.
	        Proteses protese = proteses.get(rowIndex);
	 
	        switch (columnIndex) {
	        case NUMERO:
	        	protese.setNumero((int)aValue);
				 break;
			case NOME:
				protese.setNome((String)aValue);
				 break;
			case TIPO:
				protese.setTipo((String)aValue);
				break;
			case PRECO:
				protese.setPreco((Double)aValue);
				break;
			case SELECIONE:
				protese.setSelecione((boolean)aValue);
			default:
				throw new IndexOutOfBoundsException("Coluna não existe, fora dos indice!");
	        }
	         
	        fireTableCellUpdated(rowIndex, columnIndex); // Notifica a atualização da célula
	    }
	 
	 /*metodos de manipulação de dados*/
	    
	    public void insert(Proteses protese) {
	        proteses.add(protese);
	        fireTableRowsInserted(proteses.indexOf(protese), proteses.indexOf(protese));
	    }
	 
	   
	    public void insertAll(List<Proteses> lista) {
	        proteses.addAll(lista);
	        fireTableDataChanged();
	    }
	    
	    public void delete(int position) {
	        proteses.remove(position);
	        fireTableRowsDeleted(position, position);
	    }
	  
	    public void delete(Proteses protese) {
	        proteses.remove(protese);
	        fireTableRowsDeleted(proteses.indexOf(protese), proteses.indexOf(protese));
	    }
	    
	    public void deleteAll() {
	        proteses.clear();
	        fireTableDataChanged();
	    }
	 
}

classe principal “Main”

package br.com.telas;


import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.JTextField;


public class TabelaCarrinho extends JDialog {

	private static final long serialVersionUID = 1L;
	private Double valorServ;
	private Double valorProt;
	private Double pedidoTotal;
	
	final JPanel lista = new JPanel();	
	private JTable table;
	private JTextField textValorProt;
	private JTextField textValorServ;
	private JTextField textField;
	
	private ProtesesTableModel tableModel;
	private List<Proteses> proteses;
	
	public TabelaCarrinho() {
		inicialize();
	}

	/**
	 * metodo inicializa os componentes da classe
	 */
	private void inicialize() {
		this.setTitle("Seleção de Próteses");
		int width = 800;
		int height =600;
		// setModal(true);
		Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
		int x = (screen.width-width)/2;
		int y = (screen.height-height)/3;
		setBounds(x,y,821,600);
		getContentPane().setLayout(null);

		final JPanel buttonPanel = new JPanel();
		buttonPanel.setBackground(UIManager.getColor("Button.background"));
		buttonPanel.setBounds(0, 0, 152, 562);
		getContentPane().add(buttonPanel);
		buttonPanel.setLayout(null);

		lista.setBounds(152, 0, 656, 562);
		getContentPane().add(lista);
		lista.setLayout(null);

		JLabel lblFuncionriosCadastrados = new JLabel("Selecione as Próteses");
		lblFuncionriosCadastrados.setFont(new Font("Kalinga", Font.BOLD, 16));
		lblFuncionriosCadastrados.setHorizontalAlignment(SwingConstants.CENTER);
		lblFuncionriosCadastrados.setBackground(Color.WHITE);
		lblFuncionriosCadastrados.setBounds(10, 11, 612, 29);
		lista.add(lblFuncionriosCadastrados);
		lista.setVisible(true);  

		generateListOfProteses();
		/*instancio a table model passando os dados pelo construtor*/
		tableModel=new ProtesesTableModel(proteses);
		/*passo o table model pelo construtor da tabela*/
		table = new JTable(tableModel);

		table.addMouseListener(tableMouseListener);
		table.setPreferredScrollableViewportSize(table.getPreferredSize());
		JScrollPane scrollPane = new JScrollPane(table);
		scrollPane.setBounds(0, 50, 636, 423);
		lista.add(scrollPane);
		table.getColumnModel().getColumn(0).setPreferredWidth(55);
		table.getColumnModel().getColumn(0).setMinWidth(55);
		table.getColumnModel().getColumn(1).setPreferredWidth(200);
		table.getColumnModel().getColumn(1).setMinWidth(200);
		table.getColumnModel().getColumn(2).setPreferredWidth(80);
		table.getColumnModel().getColumn(2).setMinWidth(80);
		table.getColumnModel().getColumn(3).setPreferredWidth(100);
		table.getColumnModel().getColumn(3).setMinWidth(100);
		table.getColumnModel().getColumn(4).setPreferredWidth(100);
		table.getColumnModel().getColumn(4).setMinWidth(100);
		table.setBounds(39, 175, 530, 232);

		scrollPane.setViewportView(table);

		JButton btnCalcular = new JButton("Calcular");
		btnCalcular.addActionListener(calcularActionListener);
		btnCalcular.setBounds(10, 484, 89, 23);
		lista.add(btnCalcular);

		textValorProt = new JTextField();
		textValorProt.setBounds(120, 531, 86, 20);
		lista.add(textValorProt);
		textValorProt.setColumns(10);

		JLabel lblSoma = new JLabel("Valor Pr\u00F3tese(s):");
		lblSoma.setBounds(10, 534, 106, 14);
		lista.add(lblSoma);

		textValorServ = new JTextField();
		textValorServ.setBounds(295, 531, 86, 20);
		lista.add(textValorServ);
		textValorServ.setColumns(10);

		JLabel lblService = new JLabel("Servi\u00E7o:");
		lblService.setBounds(233, 534, 72, 14);
		lista.add(lblService);

		JButton btnSomar = new JButton("Somar");
		btnSomar.addActionListener(somarActionListener);
		btnSomar.setBounds(415, 530, 89, 23);
		lista.add(btnSomar);

		textField = new JTextField();
		textField.setBounds(520, 531, 86, 20);
		lista.add(textField);
		textField.setColumns(10);
	}

	/**
	 * Evento para mouse da tabela
	 */
	MouseListener tableMouseListener=new MouseListener() {
		@Override
		public void mouseReleased(MouseEvent arg0) {}
		@Override
		public void mousePressed(MouseEvent arg0) {}
		@Override
		public void mouseExited(MouseEvent arg0) {}
		@Override
		public void mouseEntered(MouseEvent arg0) {}
		@Override
		public void mouseClicked(MouseEvent arg0) {}
	};

	/**
	 * Evento p/o botão calcular
	 */
	ActionListener calcularActionListener=new ActionListener() {
		/**
		 * Soma os preços das próteses que foram selecionadas
		 */
		public void actionPerformed(ActionEvent e) {	                       		
			 
		        Double precoProtese = 0.0 ;  
		        List<Proteses> protesesTable=tableModel.getProteses();
		        
		        //for each
		        for(Proteses protesesIn:protesesTable){
		        	
		        	//está selecionado
		        	if(protesesIn.isSelecione() == true)
		        	precoProtese+=protesesIn.getPreco();
		        }

			textValorProt.setText(String.valueOf(precoProtese));
		}
	}; 

	/**
	 * Evento p/o botão somar
	 */
	ActionListener somarActionListener=new ActionListener() {
		/**
		 * Soma o valor total do pedido com o serviço do protético
		 */
		public void actionPerformed(ActionEvent arg0) {
			try{
				if(textValorServ.getText().trim().length() > 0)
					valorServ = Double.parseDouble(textValorServ.getText());
				else
					valorServ=0D;

				if(textValorProt.getText().trim().length() > 0)
					valorProt = Double.parseDouble(textValorProt.getText());
				else
					valorProt=0D;

				pedidoTotal = valorServ + valorProt;
			}catch (Exception e) {
				e.printStackTrace();
			}
			textField.setText(String.valueOf(pedidoTotal));

		}
	};

	/**
	 * retorna uma lista de proteses, para preencher a tabela.
	 * Obs:é só um quebra galho pois não tenho o DAO
	 */
	private void generateListOfProteses(){
		proteses=new ArrayList<Proteses>();
		Proteses proteses1=new Proteses();
		proteses1.setNumero(1);
		proteses1.setNome("Protese 1");
		proteses1.setTipo("Tipo 1");
		proteses1.setPreco(100.00);
		proteses1.setSelecione(false);

		Proteses proteses2=new Proteses();
		proteses2.setNumero(2);
		proteses2.setNome("Protese 2");
		proteses2.setTipo("Tipo 2");
		proteses2.setPreco(200.00);
		proteses2.setSelecione(false);

		Proteses proteses3=new Proteses();
		proteses3.setNumero(3);
		proteses3.setNome("Protese 3");
		proteses3.setTipo("Tipo 3");
		proteses3.setPreco(300.00);
		proteses3.setSelecione(false);

		Proteses proteses4=new Proteses();
		proteses4.setNumero(4);
		proteses4.setNome("Protese 4");
		proteses4.setTipo("Tipo 4");
		proteses4.setPreco(400.00);
		proteses4.setSelecione(false);

		Proteses proteses5=new Proteses();
		proteses5.setNumero(5);
		proteses5.setNome("Protese 5");
		proteses5.setTipo("Tipo 5");
		proteses5.setPreco(500.00);
		proteses5.setSelecione(false);

		proteses.add(proteses1);
		proteses.add(proteses2);
		proteses.add(proteses3);
		proteses.add(proteses4);
		proteses.add(proteses5);
	}

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				TabelaCarrinho frame;
				try {
					frame = new TabelaCarrinho();
					frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);		 
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}					

			}
		});
	}
}

Faloww :wink:

[quote=BTO]Boa noite

Então consegui resolver, adaptei o código para testar e separei algumas coisas, para eventos “ActionListeners” aconselho criar classes ouvintes, seu código ficará fácil de manter.

JavaBean que usei para teste

package br.com.telas;

public class Proteses {
 	
	private int numero;
	private String nome;
	private String tipo;
	private Double preco;
	private boolean selecione;
	
	public int getNumero() {
		return numero;
	}
	public void setNumero(int numero) {
		this.numero = numero;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getTipo() {
		return tipo;
	}
	public void setTipo(String tipo) {
		this.tipo = tipo;
	}
	public Double getPreco() {
		return preco;
	}
	public void setPreco(Double preco) {
		this.preco = preco;
	}
	public boolean isSelecione() {
		return selecione;
	}
	public void setSelecione(boolean selecione) {
		this.selecione = selecione;
	}
	
	
}

Table Model

package br.com.telas;

import java.util.List;

import javax.swing.table.AbstractTableModel;

public class ProtesesTableModel extends AbstractTableModel {
	
	/**
	 * constantes do indice colunas
	 */
	private final int NUMERO=0;
	private final int NOME=1;
	private final int TIPO=2;
	private final int PRECO=3;
	private final int SELECIONE=4;
	
	private String[] columnNames = {"Número", "Nome", "Tipo", "Preço", "Selecione"};
	private List<Proteses> proteses;
	
	public List<Proteses> getProteses() {
		return proteses;
	}

	public ProtesesTableModel(List<Proteses> proteses) {
		this.proteses=proteses;
	}
	
	@Override
	public int getColumnCount() {
		return columnNames.length;
	}

	@Override
	public int getRowCount() {
		return proteses.size();
	}

    @Override
    public String getColumnName(int column) {
        return columnNames[column];
    }
	
	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		Proteses protese=proteses.get(rowIndex);
		try{
			switch (columnIndex) {
			case NUMERO:
				return protese.getNumero();
			case NOME:
				return protese.getNome();
			case TIPO:
				return protese.getTipo();
			case PRECO:
				return protese.getPreco();
			case SELECIONE:
				return protese.isSelecione();
			default:
				throw new IndexOutOfBoundsException();
			}
		}finally{
			fireTableCellUpdated(rowIndex, columnIndex); // Notifica a atualização da célula
		}
	}
	
	 @Override
     public Class getColumnClass(int column) {
		 switch (column) {
             case NUMERO:
                 return String.class;
             case NOME:
                 return String.class;
             case TIPO:
                 return String.class;
             case PRECO:
                 return String.class;
             case SELECIONE:
                 return Boolean.class;
         }
		 return Object.class;
     }
	
	 @Override
	    public boolean isCellEditable(int rowIndex, int columnIndex) {
	        // apenas o campo "ATIVO" será editável
	        return columnIndex == SELECIONE;
	    }
	 
	    @Override
	    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
	        // Pega o sócio referente a linha especificada.
	        Proteses protese = proteses.get(rowIndex);
	 
	        switch (columnIndex) {
	        case NUMERO:
	        	protese.setNumero((int)aValue);
				 break;
			case NOME:
				protese.setNome((String)aValue);
				 break;
			case TIPO:
				protese.setTipo((String)aValue);
				break;
			case PRECO:
				protese.setPreco((Double)aValue);
				break;
			case SELECIONE:
				protese.setSelecione((boolean)aValue);
			default:
				//throw new IndexOutOfBoundsException();
	        }
	         
	        fireTableCellUpdated(rowIndex, columnIndex); // Notifica a atualização da célula
	    }
	 
	 /*metodos de manipulação de dados*/
	    
	    public void insert(Proteses protese) {
	        proteses.add(protese);
	        fireTableRowsInserted(proteses.indexOf(protese), proteses.indexOf(protese));
	    }
	 
	   
	    public void insertAll(List<Proteses> lista) {
	        proteses.addAll(lista);
	        fireTableRowsInserted(0, getRowCount());
	    }
	    
	    public void delete(int position) {
	        proteses.remove(position);
	        fireTableRowsDeleted(position, position);
	    }
	  
	    public void delete(Proteses protese) {
	        proteses.remove(protese);
	        fireTableRowsDeleted(proteses.indexOf(protese), proteses.indexOf(protese));
	    }
	    
	    public void deleteAll() {
	        proteses.clear();
	        fireTableRowsDeleted(0, getRowCount());
	    }
	 
}

classe principal “Main”

package br.com.telas;


import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.JTextField;


public class TabelaCarrinho extends JDialog {

	private static final long serialVersionUID = 1L;
	private Double valorServ;
	private Double valorProt;
	private Double pedidoTotal;
	
	final JPanel lista = new JPanel();	
	private JTable table;
	private JTextField textValorProt;
	private JTextField textValorServ;
	private JTextField textField;
	
	private ProtesesTableModel tableModel;
	private List<Proteses> proteses;
	
	public TabelaCarrinho() {
		inicialize();
	}

	/**
	 * metodo inicializa os componentes da classe
	 */
	private void inicialize() {
		this.setTitle("Seleção de Próteses");
		int width = 800;
		int height =600;
		// setModal(true);
		Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
		int x = (screen.width-width)/2;
		int y = (screen.height-height)/3;
		setBounds(x,y,821,600);
		getContentPane().setLayout(null);

		final JPanel buttonPanel = new JPanel();
		buttonPanel.setBackground(UIManager.getColor("Button.background"));
		buttonPanel.setBounds(0, 0, 152, 562);
		getContentPane().add(buttonPanel);
		buttonPanel.setLayout(null);

		lista.setBounds(152, 0, 656, 562);
		getContentPane().add(lista);
		lista.setLayout(null);

		JLabel lblFuncionriosCadastrados = new JLabel("Selecione as Próteses");
		lblFuncionriosCadastrados.setFont(new Font("Kalinga", Font.BOLD, 16));
		lblFuncionriosCadastrados.setHorizontalAlignment(SwingConstants.CENTER);
		lblFuncionriosCadastrados.setBackground(Color.WHITE);
		lblFuncionriosCadastrados.setBounds(10, 11, 612, 29);
		lista.add(lblFuncionriosCadastrados);
		lista.setVisible(true);  

		generateListOfProteses();
		/*instancio a table model passando os dados pelo construtor*/
		tableModel=new ProtesesTableModel(proteses);
		/*passo o table model pelo construtor da tabela*/
		table = new JTable(tableModel);

		table.addMouseListener(tableMouseListener);
		table.setPreferredScrollableViewportSize(table.getPreferredSize());
		JScrollPane scrollPane = new JScrollPane(table);
		scrollPane.setBounds(0, 50, 636, 423);
		lista.add(scrollPane);
		table.getColumnModel().getColumn(0).setPreferredWidth(55);
		table.getColumnModel().getColumn(0).setMinWidth(55);
		table.getColumnModel().getColumn(1).setPreferredWidth(200);
		table.getColumnModel().getColumn(1).setMinWidth(200);
		table.getColumnModel().getColumn(2).setPreferredWidth(80);
		table.getColumnModel().getColumn(2).setMinWidth(80);
		table.getColumnModel().getColumn(3).setPreferredWidth(100);
		table.getColumnModel().getColumn(3).setMinWidth(100);
		table.getColumnModel().getColumn(4).setPreferredWidth(100);
		table.getColumnModel().getColumn(4).setMinWidth(100);
		table.setBounds(39, 175, 530, 232);

		scrollPane.setViewportView(table);

		JButton btnCalcular = new JButton("Calcular");
		btnCalcular.addActionListener(calcularActionListener);
		btnCalcular.setBounds(10, 484, 89, 23);
		lista.add(btnCalcular);

		textValorProt = new JTextField();
		textValorProt.setBounds(120, 531, 86, 20);
		lista.add(textValorProt);
		textValorProt.setColumns(10);

		JLabel lblSoma = new JLabel("Valor Pr\u00F3tese(s):");
		lblSoma.setBounds(10, 534, 106, 14);
		lista.add(lblSoma);

		textValorServ = new JTextField();
		textValorServ.setBounds(295, 531, 86, 20);
		lista.add(textValorServ);
		textValorServ.setColumns(10);

		JLabel lblService = new JLabel("Servi\u00E7o:");
		lblService.setBounds(233, 534, 72, 14);
		lista.add(lblService);

		JButton btnSomar = new JButton("Somar");
		btnSomar.addActionListener(somarActionListener);
		btnSomar.setBounds(415, 530, 89, 23);
		lista.add(btnSomar);

		textField = new JTextField();
		textField.setBounds(520, 531, 86, 20);
		lista.add(textField);
		textField.setColumns(10);
	}

	/**
	 * Evento para mouse da tabela
	 */
	MouseListener tableMouseListener=new MouseListener() {
		@Override
		public void mouseReleased(MouseEvent arg0) {}
		@Override
		public void mousePressed(MouseEvent arg0) {}
		@Override
		public void mouseExited(MouseEvent arg0) {}
		@Override
		public void mouseEntered(MouseEvent arg0) {}
		@Override
		public void mouseClicked(MouseEvent arg0) {}
	};

	/**
	 * Evento p/o botão calcular
	 */
	ActionListener calcularActionListener=new ActionListener() {
		/**
		 * Soma os preços das próteses que foram selecionadas
		 */
		public void actionPerformed(ActionEvent e) {	                       		
			 
		        Double precoProtese = 0.0 ;  
		        List<Proteses> protesesTable=tableModel.getProteses();
		        
		        //for each
		        for(Proteses protesesIn:protesesTable){
		        	
		        	//está selecionado
		        	if(protesesIn.isSelecione() == true)
		        	precoProtese+=protesesIn.getPreco();
		        }

			textValorProt.setText(String.valueOf(precoProtese));
		}
	}; 

	/**
	 * Evento p/o botão somar
	 */
	ActionListener somarActionListener=new ActionListener() {
		/**
		 * Soma o valor total do pedido com o serviço do protético
		 */
		public void actionPerformed(ActionEvent arg0) {
			try{
				if(textValorServ.getText().trim().length() > 0)
					valorServ = Double.parseDouble(textValorServ.getText());
				else
					valorServ=0D;

				if(textValorProt.getText().trim().length() > 0)
					valorProt = Double.parseDouble(textValorProt.getText());
				else
					valorProt=0D;

				pedidoTotal = valorServ + valorProt;
			}catch (Exception e) {
				e.printStackTrace();
			}
			textField.setText(String.valueOf(pedidoTotal));

		}
	};

	/**
	 * retorna uma lista de proteses, para preencher a tabela.
	 * Obs:é só um quebra galho pois não tenho o DAO
	 */
	private void generateListOfProteses(){
		proteses=new ArrayList<Proteses>();
		Proteses proteses1=new Proteses();
		proteses1.setNumero(1);
		proteses1.setNome("Protese 1");
		proteses1.setTipo("Tipo 1");
		proteses1.setPreco(100.00);
		proteses1.setSelecione(false);

		Proteses proteses2=new Proteses();
		proteses2.setNumero(2);
		proteses2.setNome("Protese 2");
		proteses2.setTipo("Tipo 2");
		proteses2.setPreco(200.00);
		proteses2.setSelecione(false);

		Proteses proteses3=new Proteses();
		proteses3.setNumero(3);
		proteses3.setNome("Protese 3");
		proteses3.setTipo("Tipo 3");
		proteses3.setPreco(300.00);
		proteses3.setSelecione(false);

		Proteses proteses4=new Proteses();
		proteses4.setNumero(4);
		proteses4.setNome("Protese 4");
		proteses4.setTipo("Tipo 4");
		proteses4.setPreco(400.00);
		proteses4.setSelecione(false);

		Proteses proteses5=new Proteses();
		proteses5.setNumero(5);
		proteses5.setNome("Protese 5");
		proteses5.setTipo("Tipo 5");
		proteses5.setPreco(500.00);
		proteses5.setSelecione(false);

		proteses.add(proteses1);
		proteses.add(proteses2);
		proteses.add(proteses3);
		proteses.add(proteses4);
		proteses.add(proteses5);
	}

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				TabelaCarrinho frame;
				try {
					frame = new TabelaCarrinho();
					frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);		 
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}					

			}
		});
	}
}

Faloww :wink:
[/quote]
Bom dia BTO,

Muito obrigada pela ajuda!!! =D

Bom dia

De nada :smiley:

Editei estes métodos no código acima, o lançamento da exception não estava legal:

@Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Proteses protese = proteses.get(rowIndex);

        switch (columnIndex) {
            case NUMERO:
                return protese.getNumero();
            case NOME:
                return protese.getNome();
            case TIPO:
                return protese.getTipo();
            case PRECO:
                return protese.getPreco();
            case SELECIONE:
                return protese.isSelecione();
            default:
                throw new IndexOutOfBoundsException("Coluna não existe, fora dos indice!");
        }
    }

    @Override
    public Class getColumnClass(int column) {
        switch (column) {
            case NUMERO:
                return String.class;
            case NOME:
                return String.class;
            case TIPO:
                return String.class;
            case PRECO:
                return String.class;
            case SELECIONE:
                return Boolean.class;
            default:
                throw new IndexOutOfBoundsException("Coluna não existe, fora dos indice!");
        }
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        // Pega o sócio referente a linha especificada.
        Proteses protese = proteses.get(rowIndex);

        switch (columnIndex) {
            case NUMERO:
                protese.setNumero((int) aValue);
                break;
            case NOME:
                protese.setNome((String) aValue);
                break;
            case TIPO:
                protese.setTipo((String) aValue);
                break;
            case PRECO:
                protese.setPreco((Double) aValue);
                break;
            case SELECIONE:
                protese.setSelecione((boolean) aValue);
            default:
                throw new IndexOutOfBoundsException("Coluna não existe, fora dos indice!");
        }
	fireTableCellUpdated(rowIndex, columnIndex); // Notifica a atualização da célula 
    }

Se foi solucionado edita seu post para: [RESOLVIDO]Seleção do checkBox só retorna um valor, até mais :wink:

Ainda não foi solucionado, só falta adaptar para a DAO. Aí se eu não conseguir arrumar vou aproveitar o post para tirar dúvida rs

Eu tenho uma tela que faz o cadastro das próteses, quando for efetuar o pedido vai abrir uma outra tela para selecionar as próteses, então ela faz uma busca no banco

Quando usava o DefaultTableModel, eu fazia o seguinte para buscar os itens do banco:

[code]public void atualizaLista(JTable lista, String nome) throws DaoException{

	DefaultTableModel dtm = (DefaultTableModel) table.getModel();      					
	 dtm.setRowCount(0); 
		List<TabeladePreco> listaTab  = new ArrayList<TabeladePreco>();
		listaTab = tabDao.consultarProteses(nome);
 		String dados[] = new String[4]; 
		for (TabeladePreco obj : listaTab) {
			dados[0] = String.valueOf(obj.getNumProtese()) ;
			dados[1] = obj.getNomeProtese();
			dados[2] = obj.getTipoProtese();
			dados[3] = String.valueOf(obj.getPrecoProtese());
			
				((DefaultTableModel) table.getModel()).addRow(dados); 
	} 
	table.repaint();
}[/code]

Pensei em alterá-lo assim:

[code]public void atualizaLista(JTable lista, String nome) throws DaoException{

	//DefaultTableModel dtm = (DefaultTableModel) table.getModel();      			
	
	ProtesesTableModel	tableModel = new ProtesesTableModel(proteses);  
	
	 tableModel.setRowCount(0); 

	 proteses=new ArrayList<TabeladePreco>(); 
	 proteses = tabDao.consultarProteses(nome);
 		
             String dados[] = new String[4];
 		
	 for (TabeladePreco obj : proteses) {
			dados[0] = String.valueOf(obj.getNumProtese()) ;
			dados[1] = obj.getNomeProtese();
			dados[2] = obj.getTipoProtese();
			dados[3] = String.valueOf(obj.getPrecoProtese());
							
			((ProtesesTableModel) table.getModel()).addAll(dados); //O eclipse diz que tem que mudar o addAll para String[], mas não dá pra fazer isso por causa do Collection
		//	proteses.add(dados);
	}     	
	table.repaint();
}[/code]

Como que altero esse método do TableModel ?

public void insertAll(List<TabeladePreco> lista) { proteses.addAll(lista); fireTableRowsInserted(0, getRowCount()); }

Minha DAO

[code]package br.com.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import br.com.exception.DaoException;
import br.com.util.DbUtil;
import br.com.bean.TabeladePreco;

public class TabeladePrecoDao {
private static final String EXCLUIR_TABELADEPRECO =
“delete from tbtabeladeprecos where numProtese = ?”;

private static final String INSERIR_TABELADEPRECO =
		"insert into tbtabeladeprecos(nomeProtese, tipoProtese, precoProtese) "+
		"values (?,?,?)";

private static final String ATUALIZAR_TABELADEPRECO =
		"update tbtabeladeprecos set " +
		"nomeProtese = ?, " +
		"tipoProtese = ?, " +
		"precoProtese = ? " +			
		"where numProtese = ? ";

private static final  String CONSULTA_TABELADEPRECO =
		"select * from tbtabeladeprecos order by tipoProtese";

private static final  String CONSULTA_TABELADEPRECO_ID = 
		"select * from tbtabeladeprecos where numProtese = ?";

private static final  String CONSULTA_TABELADEPRECO_NOME =
		"select * from tbtabeladeprecos where nomeProtese like ? order by nomeProtese";


public List<TabeladePreco> consultarProteses(String nome) throws DaoException{		
	Connection conn = DbUtil.getConnection();
	PreparedStatement statement = null;
	ResultSet result = null;
	List<TabeladePreco> listaTab = new ArrayList<TabeladePreco>();
	try {
		if(nome.equals("")){
			statement = conn.prepareStatement(CONSULTA_TABELADEPRECO);
		}else{
			statement = conn.prepareStatement(CONSULTA_TABELADEPRECO_NOME);
			statement.setString(1, "%"+nome+"%");
		}
		result = statement.executeQuery();
		while (result.next()) {
			TabeladePreco objTab = new TabeladePreco();
			objTab.setNumProtese(result.getInt(4));
			objTab.setNomeProtese(result.getString(2));
			objTab.setTipoProtese(result.getString(1));
			objTab.setPrecoProtese(result.getDouble(3));
			listaTab.add(objTab);
		}
	} catch (SQLException e) {
		throw new DaoException(e);
	} finally {
		DbUtil.close(conn, statement, result);
	}
	return listaTab;		
}	

public List<TabeladePreco> consultarProteses() throws DaoException{		
	Connection conn = DbUtil.getConnection();
	PreparedStatement statement = null;
	ResultSet result = null;
	List<TabeladePreco> listaTab = new ArrayList<TabeladePreco>();
	try {
		statement = conn.prepareStatement(CONSULTA_TABELADEPRECO);
		result = statement.executeQuery();
		while (result.next()) {
			TabeladePreco objTab = new TabeladePreco();
			objTab.setNumProtese(result.getInt(4));
			objTab.setNomeProtese(result.getString(2));
			objTab.setTipoProtese(result.getString(1));
			objTab.setPrecoProtese(result.getDouble(3));
			listaTab.add(objTab);
		}
	} catch (SQLException e) {
		throw new DaoException(e);
	} finally {
		DbUtil.close(conn, statement, result);
	}
	return listaTab;		
}

public TabeladePreco consultarTabeladePrecoID(int idFunc) throws DaoException{		
	TabeladePreco objTab = new TabeladePreco();
	Connection conn = DbUtil.getConnection();
	PreparedStatement statement = null;
	ResultSet result = null;
	try {
		statement = conn.prepareStatement(CONSULTA_TABELADEPRECO_ID);
		statement.setInt(1, idFunc);
		result = statement.executeQuery();
		while (result.next()) {
			objTab.setNumProtese(result.getInt(4));
			objTab.setNomeProtese(result.getString(2));
			objTab.setTipoProtese(result.getString(1));
			objTab.setPrecoProtese(result.getDouble(3));
		}
	} catch (SQLException e) {
		throw new DaoException(e);
	} finally {
		DbUtil.close(conn, statement, result);
	}
	return objTab;		
}

public boolean atualizarTabeladePreco(TabeladePreco objTab) throws DaoException{		
	Connection conn = DbUtil.getConnection();
	PreparedStatement statement = null;
	ResultSet result = null;
	try {
		statement = conn.prepareStatement(ATUALIZAR_TABELADEPRECO);
		statement.setString(2, objTab.getNomeProtese());
		statement.setString(1, objTab.getTipoProtese());
		statement.setDouble(3, objTab.getPrecoProtese());	
		statement.setInt(4, objTab.getNumProtese());
		statement.executeUpdate();

	} catch (SQLException e) {
		throw new DaoException(e);
	} finally {
		DbUtil.close(conn, statement, result);
	}
	return true;		
}

public boolean inserirTabeladePreco(TabeladePreco obj) throws DaoException{		
	Connection conn = DbUtil.getConnection();
	PreparedStatement statement = null;
	ResultSet result = null;
	try {
		statement = conn.prepareStatement(INSERIR_TABELADEPRECO);
		statement.setString(2, obj.getNomeProtese());
		statement.setString(1, obj.getTipoProtese());
		statement.setDouble(3, obj.getPrecoProtese());
		statement.executeUpdate();

	} catch (SQLException e) {
		throw new DaoException(e);
	} finally {
		DbUtil.close(conn, statement, result);
	}
	return true;		
}


public boolean excluirTabeladePreco(int idProtese) throws DaoException{		
	Connection conn = DbUtil.getConnection();
	PreparedStatement statement = null;
	ResultSet result = null;
	try {
		statement = conn.prepareStatement(EXCLUIR_TABELADEPRECO);
		statement.setInt(1, idProtese);
		statement.executeUpdate();

	} catch (SQLException e) {
		throw new DaoException(e);
	} finally {
		DbUtil.close(conn, statement, result);
	}
	return true;

}

}
[/code]

Agora consegui arrumar para mostrar os dados do banco na tabela:

public void refreshTable(){ List<TabeladePreco> listaTab = new ArrayList<TabeladePreco>(); try { listaTab = tabDao.consultarProteses(); } catch (DaoException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(listaTab!=null){ table.setModel(new ProtesesTableModel(listaTab)); } }

Mas quando seleciona e clica para calcular, apresenta esse erro: Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at testes.Tabela$2.actionPerformed(Tabela.java:205)

[code]ActionListener calcularActionListener = new ActionListener() {
/**
* Soma os preços das próteses que foram selecionadas
*/
public void actionPerformed(ActionEvent e) {

            Double precoProtese = 0.0 ;    
            List<TabeladePreco> protesesTable = tableModel.getProteses();  
              
            //for each  
            for(TabeladePreco protesesIn : protesesTable){  //linha 205
                  
                //está selecionado  
                if(protesesIn.isSelecione() == true)  
                precoProtese+=protesesIn.getPrecoProtese();  
            }  

        textValorProt.setText(String.valueOf(precoProtese));  
    } 

};[/code]

Boa tarde

Blz vamos lá…

1°) Mude somente uma linha no metodos abaixo, em ProteseTableModel.java

public void insertAll(List<Proteses> lista) {  
            proteses.addAll(lista);  
           fireTableDataChanged(); //irá notificar a todos os ouvintes "eventos", que houve uma mudança em toda tabela
        }  
                    
        public void deleteAll() {  
            proteses.clear();  
            fireTableDataChanged();//irá notificar a todos os ouvintes "eventos", que houve uma mudança em toda tabela
        }

a maneira que está populando a tabela, e atualizando a cada seleção está errada:

public void refreshTable(){  
        List<TabeladePreco> listaTab  = new ArrayList<TabeladePreco>();  
        try {  
            listaTab = tabDao.consultarProteses();  
        } catch (DaoException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  

        //aqui vc cria um table model a cada atualização , isto não está legal :(
        if(listaTab!=null){  
            table.setModel(new ProtesesTableModel(listaTab));  
        }  
    } 

O certo seria assim:

//variaveis globais
private ProtesesTableModel tableModel;
private List<TabeladePreco>listaTab;

//exemplo de construtor
public Main(){
     inicialize();
}


//chame no construtor da sua classe este metodo
//atribua todas propriedades da JTable, como table model, tamanho das colunas, colunas com máscara
public void inicialize(){
         listaTab=new ArrayList<TabeladePreco>();
         /*instancio a table model passando os dados pelo construtor*/  
        tableModel=new ProtesesTableModel(listaTab);  
        jtable.setModel(tableModel);  
      //insira o restante do código, tamanho das colunas, formato das celulas, eventos listeners etc...
};


//estou atirando a Exceção ao inves de tratar, quem chamar este metodo tem que tratar com try/catch
//chame este metodo em um botão por exemplo
public void refreshTable()thows DaoException{    
        listaTab = tabDao.consultarProteses();  
        tableModel.deleteAll();
        tableModel.insertAll(listaTab);
    } 

Você não pode mudar o modelo tabela em tempo de execução, antes de executar a classe sete todas propriedades,
no construtor ou crie um metodo para faze-lô, senão terá um NullPointerException

Esta prática de criar um modelo para a JTable é Orientada a Objetos, já a DefaultTableModel vc só ia ter Strings ao inves do objeto
neste caso Proteses

Agora sim haha

Obrigadão pela ajuda (;