JTable e setModel

6 respostas
R

Boa tarde pesoal,

estou a fazer um programa que lista na interface grafica algumas tabelas como pacientes e médicos.
O problema é que depois de listar uma vez a tabela, não consigo lista-lá novamente.
Me ajudem, por favor!

código que chama a tabela e seu model

private JMenuItem getJMenuItem_listar_paciente() {
		if (jMenuItem_listar_paciente == null) {
			jMenuItem_listar_paciente = new JMenuItem("Pacientes");
			jMenuItem_listar_paciente.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					setFlagListar(1);
					
					try {
						List<Paciente> resultList;
						PacienteDAO dao = new PacienteDAO();
						resultList = dao.getLista();
						
						PacienteTableModel modelo = new PacienteTableModel(resultList);
						jTable_mostra_dados.setModel(modelo);
						jTable_mostra_dados.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
						
						scrollpane = new JScrollPane();
						scrollpane.setViewportView(jTable_mostra_dados);
						scrollpane.setBounds(25,50,650,100);
						getContentPane().add(scrollpane,BorderLayout.CENTER);
						setSize(700,500);
						setVisible(true);
					} catch (SQLException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
			});
			
		}
		return jMenuItem_listar_paciente;
	}

Classe referente ao modelo da tabela

public class PacienteTableModel extends AbstractTableModel{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	
	private static final int COL_NOME = 0;  
    private static final int COL_CONVENIO = 1;
    private static final int COL_DATA_NASCIMENTO = 2;  
    private static final int COL_TEL = 3;  
    private static final int COL_CEL = 4;
    private static final int COL_ENDERECO = 5;
    private static final int COL_CEP = 6;
    private static final int COL_CIDADE = 7;
    private static final int COL_ESTADO = 8;
    
      
    private List<Paciente> listaPaciente;  
  
  
      
    public PacienteTableModel(List<Paciente> listaPaciente) {  
         
        this.listaPaciente = listaPaciente;    
         
    }  
	
	
	
	@Override
	public int getColumnCount() {
		// TODO Auto-generated method stub
		return 9;
	}

	@Override
	public int getRowCount() {
		// TODO Auto-generated method stub
		return listaPaciente.size();
	}

	
	 public String getColumnName(int column) {  
		  
	        if (column == COL_NOME) return "Nome";  
	        if (column == COL_CONVENIO) return "Convenio";  
	        if (column == COL_DATA_NASCIMENTO) return "Data Nascimento";  
	        if (column == COL_TEL) return "Telefone";
	        if (column == COL_CEL) return "Celular";
	        if (column == COL_ENDERECO) return "Endereço";
	        if (column == COL_CEP) return "CEP";
	        if (column == COL_CIDADE) return "Cidade";
	        if (column == COL_ESTADO) return "Estado";
	        return ""; //Nunca deve ocorrer  
	    }  
	
	
	
	@Override
	public Object getValueAt(int row, int column) {
		Paciente titulo = listaPaciente.get(row);  
        if (column == COL_NOME) return titulo.getNome();  
        else if (column == COL_CONVENIO) return titulo.getConvenio();  
        else if (column == COL_DATA_NASCIMENTO) return titulo.getData_nascimento();  
        else if (column == COL_TEL) return titulo.getTel();
        else if (column == COL_CEL) return titulo.getCel();
        else if (column == COL_ENDERECO) return titulo.getEndereco();
        else if (column == COL_CEP) return titulo.getCep();
        else if (column == COL_CIDADE) return titulo.getCidade();
        else if (column == COL_ESTADO) return titulo.getEstado();
        throw new IllegalArgumentException("Invalid column");  
        //return ""; //Nunca deve ocorrer  
	}
	
	
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {  
	      
        Paciente titulo = listaPaciente.get(rowIndex);  
        if (columnIndex== COL_NOME) titulo.setNome(aValue.toString());  
        else if (columnIndex== COL_CONVENIO) titulo.setConvenio(aValue.toString());  
        else if (columnIndex== COL_DATA_NASCIMENTO) titulo.setData_nascimento(aValue.toString());  
        else if (columnIndex== COL_TEL) titulo.setTel(aValue.toString());
        else if (columnIndex== COL_TEL) titulo.setCel(aValue.toString());
        else if (columnIndex== COL_ENDERECO) titulo.setEndereco(aValue.toString());
        else if (columnIndex== COL_CEP) titulo.setCep(aValue.toString());
        else if (columnIndex== COL_CIDADE) titulo.setCidade(aValue.toString());
        else if (columnIndex== COL_ESTADO) titulo.setEstado(aValue.toString());
    }  
	
	
	  
    public Class<?> getColumnClass(int columnIndex) {    
          
        if (columnIndex == COL_NOME) {    
            return String.class;    
        } else if (columnIndex == COL_CONVENIO) {    
            return String.class;    
        } else if (columnIndex == COL_DATA_NASCIMENTO) {    
            return String.class;    
        } else if (columnIndex == COL_CEL) {    
            return String.class;    
        } else if (columnIndex == COL_TEL) {    
            return String.class;    
        } else if (columnIndex == COL_ENDERECO) {    
            return String.class;    
        } else if (columnIndex == COL_CEP) {    
            return String.class;    
        } else if (columnIndex == COL_CIDADE) {    
            return String.class;    
        } else if (columnIndex == COL_ESTADO) {    
            return String.class;    
        } else {    
            return String.class;    
        }   
    }
    
    public Paciente get(int row) {  
        
        return listaPaciente.get(row);  
    }  

}

6 Respostas

drsmachado

Vá até o fórum de java básico e leia o post que diz “Você é novo no fórum? Vai postar código?” para utilizar de forma mais adequada o seu espaço.

R

Ok, valeu pela dica drsmachado.

Vc pode me ajudar com o problema?

ViniGodoy

Não adicione novamente a tabela no JScrollPane.

A única coisa que vc deveria atualizar é o model no JTable.

R

Não entendi.
Se não adicionar a tabela no objeto do tipo JScroolPane a formatação e layout não ficam boas.

ViniGodoy

Você deve adicionar uma única vez, na criação da tela.

No clique, você só troca os dados da tabela, alterando o model.

R

Valeu!!!
Deu certo!

Porém agora estou com outro problema.

Alguns itens da tabela não estão sendo listados.
Já conferi no banco e os dados estão lá.
E estão sendo acessados corretamente pelo DAO.

Criado 5 de junho de 2012
Ultima resposta 5 de jun. de 2012
Respostas 6
Participantes 3