Ajuda com AbstractTableModel Iniciante

2 respostas
jorgereidinaldo

Esta é a minha primeira tentativa em implementar o AbstractTableModel já tinha utilizado uma vez o DefaultTableModel e funcionou corretamente, porem desta vez estou com dificuldadeee em até visualizar como fazer as chamadas do banco de dados para a Jtable peguei este modelo da net pois foi um que achei robusto e que para novas tabelas ficaria maifácilll reaproveitar gostaria que verificassem e spudessemmm me ajudar nesta nova caminhada para mudançaaa, saindo do defaut para o abstract :!:

Segue meu hotmail caso alguem tenha um tempo disponivel para me ajudar
[email removido]

2 Respostas

ViniGodoy

Tente fazer primeiro sem essa superclasse aí. Entenda o conceito e só depois refatore.

Outra coisa, você não deve chamar métodos virtuais da classe filha no construtor da classe pai. Lembre-se que durante o construtor, a construção começa de cima para baixo, portanto, quando você chamar o criarColunas() não haverá um objeto do filho para responder. O comportamento disso é indefinido, é pode mudar de VM para VM.

jorgereidinaldo

Agora tenho uma Classe Abstract table model

public class SubstanciaTableModel extends AbstractTableModel {
	 
		  
	    private static final long serialVersionUID = 1L;  
	  
	    /* Lista de Cliente que representam as linhas. */  
	    private List<Substancia> linhas;  
	  
	    /* Array de Strings com o nome das colunas. */  
	    private String[] colunas = new String[]{  
	        "Substancia"};  
	  
	  
	  
	    /* Cria um ClienteTableModel vazio. */  
	    public SubstanciaTableModel() {  
	        linhas = new ArrayList<Substancia>();  
	    }  
	  
	    /* Cria um ClienteTableModel carregado com 
	     * a lista de Cliente especificada. */  
	    public SubstanciaTableModel(List<Substancia> listaDeSubstancia) {  
	        linhas = new ArrayList<Substancia>(listaDeSubstancia);  
	    }  
	  
	  
	    /* Retorna a quantidade de colunas. */  
	    @Override  
	    public int getColumnCount() {  
	        // Está retornando o tamanho do array "colunas".  
	        return colunas.length;  
	    }  
	  
	    /* Retorna a quantidade de linhas. */  
	    @Override  
	    public int getRowCount() {  
	        // Retorna o tamanho da lista de Cliente.  
	        return linhas.size();  
	    }  
	  
	  
	    @Override  
	    public String getColumnName(int columnIndex) {  
	        // Retorna o conteúdo do Array que possui o nome das colunas  
	        return colunas[columnIndex];  
	    }  
	  
	    ;  
	  
	    @Override  
	    public Class<?> getColumnClass(int columnIndex) {  
	        return String.class;  
	    }  
	  
	    ;  
	  
	  
	    @Override  
	    public Object getValueAt(int rowIndex, int columnIndex) {  
	            Substancia substancia = linhas.get(rowIndex);  
	  
	        // Retorna o campo referente a coluna especificada.  
	        // Aqui é feito um switch para verificar qual é a coluna  
	        // e retornar o campo adequado. As colunas sãoas mesmas  
	        // que foram especificadas no array "colunas".  
	        switch (columnIndex) {  
	  
	            // Seguindo o exemplo: "Tipo","Data de Cadastro", "Nome", "Idade"};  
	            case 0:  
	                return substancia.getFi_id();
	            
	            
	            default:  
	                // Isto não deveria acontecer...  
	                throw new IndexOutOfBoundsException("columnIndex out of bounds");  
	        }  
	    }  
	  
	@Override  
	//modifica na linha e coluna especificada  
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {  
	      Substancia substancia = linhas.get(rowIndex); // Carrega o item da linha que deve ser modificado  
	  
	     switch (columnIndex) { // Seta o valor do campo respectivo  
	         case 0:  
	        	 	substancia.setSubstancia(aValue.toString());
	         
	         default:  
	             // Isto não deveria acontecer...               
	     }  
	     fireTableCellUpdated(rowIndex, columnIndex);  
	     }  
	  
	    //modifica na linha especificada  
	    public void setValueAt(Substancia aValue, int rowIndex) {  
	        Substancia substancia = linhas.get(rowIndex); // Carrega o item da linha que deve ser modificado  
	  
	        substancia.setSubstancia(aValue.getSubstancia());  
	       
	        fireTableCellUpdated(rowIndex, 0);  
	        
	  
	    }  
	    ;  
	  
	  
	    ;  
	  
	  
	    @Override  
	    public boolean isCellEditable(int rowIndex, int columnIndex) {  
	        return false;  
	    }  
	  
	  
	    public Substancia getSubstancia(int indiceLinha) {  
	        return linhas.get(indiceLinha);  
	    }  
	  
	  
	  
	    /* Adiciona um registro. */  
	    public void addCliente(Substancia m) {  
	        // Adiciona o registro.  
	        linhas.add(m);  
	  
	  
	        int ultimoIndice = getRowCount() - 1;  
	  
	        fireTableRowsInserted(ultimoIndice, ultimoIndice);  
	    }  
	  
	    /* Remove a linha especificada. */  
	    public void removeCliente(int indiceLinha) {  
	        linhas.remove(indiceLinha);  
	  
	        fireTableRowsDeleted(indiceLinha, indiceLinha);  
	    }  
	  
	    /* Adiciona uma lista de Cliente ao final dos registros. */  
	    public void addListaDeSubstancia(List<Substancia> substancia) {  
	        // Pega o tamanho antigo da tabela.  
	        int tamanhoAntigo = getRowCount();  
	  
	        // Adiciona os registros.  
	        linhas.addAll(substancia);  
	  
	        fireTableRowsInserted(tamanhoAntigo, getRowCount() - 1);  
	        
	        
	        
	        
	    }  
	  
	    /* Remove todos os registros. */  
	    public void limpar() {  
	        linhas.clear();  
	  
	  
	        fireTableDataChanged();  
	    }  
	  
	    /* Verifica se este table model esta vazio. */  
	    public boolean isEmpty() {  
	        return linhas.isEmpty();  
	    }  
	  
	  
	  
	

}

Minha Classe entidade

public class Substancia {
	private int fi_id;
	private String substancia;
	
	
	public int getFi_id() {
		return fi_id;
	}
	public void setFi_id(int fi_id) {
		this.fi_id = fi_id;
	}
	public String getSubstancia() {
		return substancia;
	}
	public void setSubstancia(String substancia) {
		this.substancia = substancia;
	}
	

}
public class SubstanciaDao {
	List<Substancia>substancia ;
	
	private Connection conexao;

    public SubstanciaDao() throws SQLException {
        this.conexao = CriaConexao.getConexao();

}
    
    public List<Substancia> getLista(String nome) throws SQLException{
        
    String sql = "select * from tb_substancias WHERE fi_substancia like ? ORDER BY fi_substancia ASC";
    PreparedStatement stmt = this.conexao.prepareStatement(sql);
    stmt.setString(1, nome);
    ResultSet rs = stmt.executeQuery();
    
   
    List <Substancia> listaClientes = new ArrayList<Substancia>();
    
    while (rs.next()){
     
    	Substancia c1 = new Substancia();
                c1.setFi_id(Integer.valueOf(rs.getString("fi_pk_id")));
                c1.setSubstancia(rs.getString("fi_substancia"));
                
                 
        listaClientes.add(c1);
    }    
    rs.close();
    stmt.close();
   
    return listaClientes;
     
    }
    
    
    public ArrayList<Substancia> getLista() throws SQLException{
        
    	String sql = "select fi_substancia from tb_substancias";  
        PreparedStatement stmt = this.conexao.prepareStatement(sql);  
        ResultSet rs = stmt.executeQuery();  
  
        List<Substancia> minhalista = new ArrayList<Substancia>();  
  
        while (rs.next()){  
  
            Substancia cad = new Substancia();  
            cad.setSubstancia(rs.getString("fi_substancia"));//(rs.getString("nome"));  
            minhalista.add(cad);  
        }  
        rs.close();  
        stmt.close();  
    
        return (ArrayList<Substancia>) minhalista;  
    }

}
public class Teste1 extends JFrame {
	  
	private JPanel contentPane;
	private JTable table;
	private JButton btnPesquisar;
	private JTextField tfPesquisar;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Teste frame = new Teste();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Teste1() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		
		JPanel panel = new JPanel();
		contentPane.add(panel, BorderLayout.CENTER);
		panel.setLayout(null);
		
		table = new JTable(new SubstanciaTableModel());
		table.setBounds(12, 118, 412, 134);
		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		panel.add(table);
		
		btnPesquisar = new JButton("Pesquisar");
		
		btnPesquisar.setBounds(228, 58, 117, 24);
		panel.add(btnPesquisar);
		
		tfPesquisar = new JTextField();
		tfPesquisar.setBounds(38, 61, 114, 18);
		panel.add(tfPesquisar);
		tfPesquisar.setColumns(10);
	}
	 
	

		
	
}
Criado 15 de novembro de 2011
Ultima resposta 19 de nov. de 2011
Respostas 2
Participantes 2