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

10 respostas
K

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

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();
					}					
	                
	            }
	        });
	    }
}

10 Respostas

B

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:

K

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 ;)

Obrigada BTO, vou dar uma lida nesses materiais (;

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

B

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:

K

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:


Bom dia BTO,

Muito obrigada pela ajuda!!! =D

B

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:

K

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

K

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:

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();
	}
Pensei em alterá-lo assim:
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();
	}
Como que altero esse método do TableModel ?
public void insertAll(List<TabeladePreco> lista) {               	
            proteses.addAll(lista);  
            fireTableRowsInserted(0, getRowCount());  
        }
Minha DAO
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;

	}
}
K
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)

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));  
        } 
};
B

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

K

Agora sim haha

Obrigadão pela ajuda (;

Criado 12 de julho de 2013
Ultima resposta 19 de jul. de 2013
Respostas 10
Participantes 2