Criar um método que preencha uma jTable com ArryList de objetos quando o formulário carregar

0 respostas
leandropl

Galera, eu estou a 3 dias vendo vídeos e pdfs, tentei um monte de solução e até agora não consegui fazer a bendita jtable carregar a lista de objetos!! hahahah
Vamos lá, espero que possam me ajudar!!!

Estou usando o WindowBuilder do Eclipse e BD MySql

Primeiramente eu criei uma classe que faz conexão com o BD MySQL e me retorna uma lista com os objetos:

public class OcorrenciaDAO {

public ArrayList<Ocorrencia> consultarOcorrencia (){

		ArrayList <Ocorrencia>lista = new ArrayList<Ocorrencia>();
		
		try {
			Connection conn = ConectaMySql.obtemConexao();
			
			String queryInsert = "SELECT * FROM ocorrencias";
			
			PreparedStatement ps = conn.prepareStatement(queryInsert);
			
			ResultSet rs = ps.executeQuery();
			
				while(rs.next()){
					Ocorrencia ocor = new Ocorrencia();
					
					ocor.setId(rs.getInt(1));
					ocor.setId_atendente(rs.getInt(2));
					ocor.setModelo(rs.getString(3));
					ocor.setPlaca(rs.getString(4));	
					
					lista.add(ocor);
				} 				
		} catch (Exception e) {
			e.printStackTrace();
		}		
		return lista;
	}	
}

Ok, até ae sem nenhum problema, já testei pelo SOAPui e realmente a classe retorna uma lista de objetos.

Baseado em diversos tópicos do fórum e guias, eu criei uma classe para manipular minha jTable:

public class ModeloTabela extends AbstractTableModel{

	private ArrayList linhas = null;
	private String[] colunas = null;
	
	public ModeloTabela (ArrayList lin, String[] col){
		setLinhas(lin);
		setColunas(col);			
	}	
	public ArrayList getLinhas(){
		return linhas;
	}
	
	public void setLinhas(ArrayList dados){
		linhas = dados;
	}	
	public String[] getColunas(){
		return colunas;
	}	
	public void setColunas(String[] nomes){
		colunas = nomes;
	}	
	public int getColumnCount(){
		return colunas.length;
	}	
	public int getRowCount(){
		return linhas.size();
	}	
	public String getColumnName(int numCol){
		return colunas[numCol];
	}	
	public Object getValueAt(int numLin, int numCol){
		Object[] linha = (Object[])getLinhas().get(numLin);
		return linha[numCol];
	}
}

Bom, ai eu já não consigo testar, então não sei se esta correta.
Por fim, dentro do meu formulário, eu criei um método que deveria:
1) criar a lista de objetos
2) criar a jTable

public void preencherTabela(){
		
                //Array para receber a lista de objetos e array para receber os nomes do cabeçalho da jTable
		ArrayList<Ocorrencia> dados = new ArrayList<Ocorrencia>();
		String [] Colunas = new String[]{"ID","Atendente", "Modelo","PLACA"};
		//dados recebe a lista de objetos 
		OcorrenciaDAO ocDAO = new OcorrenciaDAO();
		dados = ocDAO.consultarOcorrencia();

		//a partir daqui eu não sei explicar direito que ocorre
                ModeloTabela modelo = new ModeloTabela(dados, Colunas);
			
		tableOcorrencia = new JTable();
		tableOcorrencia.setBounds(10, 164, 530, 199);
		tableOcorrencia.setModel(modelo);
			
		tableOcorrencia.getColumnModel().getColumn(0).setPreferredWidth(80);
		tableOcorrencia.getColumnModel().getColumn(0).setResizable(false);
		tableOcorrencia.getColumnModel().getColumn(1).setPreferredWidth(180);
		tableOcorrencia.getColumnModel().getColumn(1).setResizable(false);
		tableOcorrencia.getColumnModel().getColumn(2).setPreferredWidth(180);
		tableOcorrencia.getColumnModel().getColumn(2).setResizable(false);
		tableOcorrencia.getColumnModel().getColumn(3).setPreferredWidth(180);
		tableOcorrencia.getColumnModel().getColumn(3).setResizable(false);
		tableOcorrencia.getTableHeader().setReorderingAllowed(false);
		tableOcorrencia.setAutoResizeMode(tableOcorrencia.AUTO_RESIZE_OFF);
		tableOcorrencia.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		
		contentPane.add(tableOcorrencia);
		
	}

E por fim, chamei esse metodo no evento windows open do meu form:

public ControleOcorrencias(Atendente atendente) {
		
		addWindowListener(new WindowAdapter() {
			@Override
			public void windowOpened(WindowEvent arg0) {
				// --> aqui
				preencherTabela();
				btnAdicionar.setVisible(false);
				txtModelo.setEditable(false);
				txtPlaca.setEditable(false);
				
			}
		});

Enfim, em que parte do código eu deveria instaciar a jTable??
Como instanciar ela junto com meu ArrayList?

Criado 12 de março de 2015
Respostas 0
Participantes 1