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

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:

[code]
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];
}

}[/code]

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?