Passar uma lista para o addRow (AbstractTableModel)[RESOLVIDO]

Boa noite galera!

É o seguinte estou tentando usar o AbstractTableModel e abandonar o DefaultTableModel rsrsrs…
Estou com a seguinte duvida minha consulta no banco me retorna uma lista, por exemplo, no DAO faço o select retornando
uma lista com os resultados e na minha camada de negocio chamo este metodo e se alista estiver vazia me retorna uma mensagem.
Pois então como faço para fazer com que está lista sai no meu JTable, vou ter que alterar meu metodo addRow?
O que posso fazer?
Obrigado Galera
:?:

GAlera consegui implementar a lista porém estou com algumas duvidas.
Vou postar o código primeiro.

Método do botão pesquisar:

[code]JButton btnPesquisarProf = new JButton(“Pesquisar”);
btnPesquisarProf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ProfessorNegocio profNegocio = new ProfessorNegocio();
Integer codProf;
String[] colunas = {“ID”,“Cód. Professor”,“Nome”,“CPF”,“Especialidade”,“Formação”,“Telefone”,“Endereço”};

			if(edtCodProf.getText().equals("")){
				codProf = 0;
			}else{
				codProf = Integer.parseInt(edtCodProf.getText());
			}
			try{
				ArrayList<? extends Pessoa> listaProf = profNegocio.listar(
						edtNomeProf.getText(), codProf,
						edtCpfProf.getText());
				
				ProfessorModel modelo = new ProfessorModel(listaProf, colunas);
				System.out.println(modelo.getValueAt(0, 1));
				gridPesqProf.setModel(modelo);
				gridPesqProf.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
				
			}catch(Exception e1){
				JOptionPane.showMessageDialog(null,"Ocorreu o seguinte erro ao listar os professores: "+ e1.getMessage(),
                        "Erro", JOptionPane.OK_OPTION);
				e1.printStackTrace();
			}
		}
	});[/code]

Meu Modelo para o JTable:

[code]public ProfessorModel(ArrayList dados, String[] colunas){
setLinhas(dados);
setColunas(colunas);
}

	public String[] getColunas(){
		return colunas;
	}
	
	public ArrayList getLinhas(){
		return linhas;
	}
	
	public void setColunas(String[] strings){
		colunas = strings;
	}
	
	public void setLinhas(ArrayList list){
		linhas = list;
	}
	
	public int getColumnCount(){
		return getColunas().length;
	}
	
	public int getRowCount(){
		return getLinhas().size();
	}
	
	public Object getValueAt(int rowIndex, int columnIndex){
		String[] linha = (String[]) getLinhas().get(rowIndex);
		return linha[columnIndex];
	}
	
	
}[/code]

Ao executar a tabela não é preenchida, no caso na camada de negocio a lista é verificada se está vazia, portanto a mesma não está. E ocorre este Excption:

java.lang.ClassCastException: br.com.framework.escola.entidades.pessoas.Professor cannot be cast to [Ljava.lang.String; at br.com.framework.escola.visao.gui.PesquisaProfessores$ProfessorModel.getValueAt(PesquisaProfessores.java:174) at br.com.framework.escola.visao.gui.PesquisaProfessores$2.actionPerformed(PesquisaProfessores.java:117)
referente a isto:

public Object getValueAt(int rowIndex, int columnIndex){ String[] linha = (String[]) getLinhas().get(rowIndex); return linha[columnIndex]; }

Oque estou fazendo errado?
Obrigado

Galera revisei o código e fiz algumas alterações

Conseguir fazer com que o exception desaparecesse, porém o nome das minhas colunas estão vindo assim:

br.com.framework.escola.entidades.pessoas.Professor@186d4c1

ou seja o nome do pacote, não entendi porque, porém quando chamo o método para retornar o nome da coluna, ele retorna o nome que eu defini
Ah e ele não está trazendo os dados no Jtable.
Obs: Ja coloquei ele dentro de uma scrollPane
Segue o código fonte:

[code]
JButton btnPesquisarProf = new JButton(“Pesquisar”);
btnPesquisarProf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ProfessorNegocio profNegocio = new ProfessorNegocio();
Integer codProf;

			if(edtCodProf.getText().equals("")){
				codProf = 0;
			}else{
				codProf = Integer.parseInt(edtCodProf.getText());
			}
			try{
				ArrayList<? extends Pessoa> listaProf = profNegocio.listar(
						edtNomeProf.getText(), codProf,
						edtCpfProf.getText());
				
				ProfessorModel modelo = new ProfessorModel((List<Professor>) listaProf);
				gridPesqProf.setModel(modelo);
				gridPesqProf.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
				gridPesqProf.setAutoResizeMode(gridPesqProf.AUTO_RESIZE_ALL_COLUMNS);
				gridPesqProf.repaint();
				System.out.println(modelo.getColumnName(0));
				
				
			}catch(Exception e1){
				JOptionPane.showMessageDialog(null,"Ocorreu o seguinte erro ao listar os professores: "+ e1.getMessage(),
                        "Erro", JOptionPane.OK_OPTION);
				e1.printStackTrace();
			}
		}
	});
	btnPesquisarProf.setBounds(264, 83, 89, 23);
	panel.add(btnPesquisarProf);
	
	JScrollPane scrpPesq = new JScrollPane();
	scrpPesq.setBounds(10, 145, 487, 180);
	frmPesquisaProfessores.getContentPane().add(scrpPesq);
	
	gridPesqProf = new JTable();
	scrpPesq.setColumnHeaderView(gridPesqProf);
}

public class ProfessorModel extends AbstractTableModel{
	private List<Professor> linhas = null;
	private String[] colunas = {"ID","Cód. Professor","Nome","CPF","Especialidade","Formação","Telefone","Endereço"};
	
	
	public ProfessorModel(){
	}
	
	public ProfessorModel(List<Professor> dados){
		setLinhas(dados);
		setColunas(this.colunas);
	}
	
	public String[] getColunas(){
		return colunas;
	}
	
	public List<Professor> getLinhas(){
		return linhas;
	}
	
	public void setColunas(String[] strings){
		colunas = strings;
	}
	
	public void setLinhas(List<Professor> list){
		this.linhas = list;
		fireTableDataChanged();
	}
	
	public int getColumnCount(){
		return getColunas().length;
	}
	
	public int getRowCount(){
		return getLinhas().size();
	}
	
	public Object getValueAt(int rowIndex, int columnIndex){
		Professor professor = (Professor) linhas.get(rowIndex);
		return professor;
	}
	
	public boolean isCellEditable(int rowIndex, int columnIndex) {  
        return true;  
    } 
	
	public String getColumnName(int col){  
	    return getColunas()[col];  
	}
  
	
}

}[/code]

Leia o seguinte tutorial:

É importante entender o conceito antes de sair implementando na louca.

[quote=ViniGodoy]Leia o seguinte tutorial:

É importante entender o conceito antes de sair implementando na louca.[/quote]

Valeu Vini. Vou dar uma lida e qualquer coisa posto alguma dúvida se surgir
Abs

Realmente um excelente tutorial, agora conseguir entender o AbstractTableModel hehe…
POrém estou com algumas dúvidas, fiz o teste aqui e colocou na jtable os dados do banco normalmente, porém
o que faltou foi o nome das colunas que não aparecerem e inclusive coloquei meu Jtable dentro de uma ScroolPane
vou postar o código aqui: (Nota estou utilizando o Window Builder)

[code]JButton btnPesquisarProf = new JButton(“Pesquisar”);
btnPesquisarProf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ProfessorNegocio profNegocio = new ProfessorNegocio();
Integer codProf;

			if(edtCodProf.getText().equals("")){
				codProf = 0;
			}else{
				codProf = Integer.parseInt(edtCodProf.getText());
			}
			try{
				ArrayList<? extends Pessoa> listaProf = profNegocio.listar(
						edtNomeProf.getText(), codProf,
						edtCpfProf.getText());
				
				ProfessorModel modelo = new ProfessorModel((List<Professor>) listaProf);
				gridPesqProf.setModel(modelo);
				/*ProfessorModel modelo = new ProfessorModel((List<Professor>) listaProf);
				gridPesqProf.setModel(modelo);
				gridPesqProf.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
				gridPesqProf.setAutoResizeMode(gridPesqProf.AUTO_RESIZE_ALL_COLUMNS);
				gridPesqProf.repaint();
				System.out.println(modelo.getColumnName(0));*/
				
				
			}catch(Exception e1){
				JOptionPane.showMessageDialog(null,"Ocorreu o seguinte erro ao listar os professores: "+ e1.getMessage(),
                        "Erro", JOptionPane.OK_OPTION);
				e1.printStackTrace();
			}
		}
	});
	btnPesquisarProf.setBounds(264, 83, 128, 23);
	panel.add(btnPesquisarProf);
	
	JScrollPane scrpPesq = new JScrollPane();
	scrpPesq.setBounds(10, 145, 882, 180);
	frmPesquisaProfessores.getContentPane().add(scrpPesq);
	
	gridPesqProf = new JTable();
	scrpPesq.setColumnHeaderView(gridPesqProf);
}

public class ProfessorModel extends AbstractTableModel{
	private String[] colunas = {"ID","Cód. Professor","Nome","CPF","Especialidade","Formação","Telefone","Endereço"};
	private List<Professor> linhas;
	
	private static final int ID = 0;
	private static final int COD_PROF = 1;
	private static final int NOME = 2;
	private static final int CPF = 3;
	private static final int ESPECIALIDADE = 4;
	private static final int FORMACAO = 5;
	private static final int TELEFONE = 6;
	private static final int ENDERECO = 7;
	
	public ProfessorModel(){
		linhas = new ArrayList<Professor>();
	}
	
  public ProfessorModel(List<Professor>listaProfessores){
	  linhas = new ArrayList<Professor>(listaProfessores);
  }
  
  public int getRowCount(){
	  return linhas.size();
  }
  
  public int getColumnCount(){
	  return colunas.length;
  }
  
  public String getColumnName(int columnIndex){
	  return colunas[columnIndex];
  }
  
  @Override
  public Class<?> getColumnClass(int columnIndex){
	  switch(columnIndex){
	  case ID:
		  return Integer.class;
	  case COD_PROF:
		  return Integer.class;
	  case NOME:
		  return String.class;
	  case CPF:
		  return String.class;
	  case ESPECIALIDADE:
		  return String.class;
	  case FORMACAO:
		  return String.class;
	  case TELEFONE:
		  return String.class;
	  case ENDERECO:
		  return String.class;
	  default:
		  throw new IndexOutOfBoundsException("columnIndex out of bounds");
	  }
  }
  
  public boolean isCellEditable(int rowIndex, int columnIndex){
	  return false;
  }
  
  public Object getValueAt(int rowIndex, int columnIndex){
	  Professor prof = linhas.get(rowIndex);
	  
	  switch(columnIndex){
	  case ID:
		  return prof.getIdProf();
	  case COD_PROF:
		  return prof.getCodigo();
	  case NOME:
		  return prof.getNome();
	  case CPF:
		  return prof.getCpf();
	  case ESPECIALIDADE:
		  return prof.getEspecialidade();
	  case FORMACAO:
		  return prof.getFormacao();
	  case TELEFONE:
		  return prof.getTelefone();
	  case ENDERECO:
		  return prof.getEndereco();
	  default:
		  throw new IndexOutOfBoundsException("columnIndex out of bounds");
	  }
  }
  
  public void setValueAt(Object aValue, int rowIndex, int columnIndex){
	  Professor prof = linhas.get(rowIndex);
	  
	  switch(columnIndex){
	  case ID:
		  //prof.set
		  break;
	  case COD_PROF:
		  prof.setCodigo((Integer)aValue);
		  break;
	  case NOME:
		  prof.setNome((String)aValue);
		  break;
	  case CPF:
		  prof.setCpf((String)aValue);
		  break;
	  case ESPECIALIDADE:
		  prof.setEspecialidade((String)aValue);
		  break;
	  case FORMACAO:
		  prof.setFormacao((String)aValue);
		  break;
	  case TELEFONE:
		  prof.setTelefone((String)aValue);
		  break;
	  case ENDERECO:
		  prof.setEndereco((String)aValue);
		  break;
	  default:
		  throw new IndexOutOfBoundsException("columnIndex out of bounds");
	  }
	  
	  fireTableCellUpdated(rowIndex, columnIndex); // Notifica a atualização da célula

  }
// Retorna o sócio referente a linha especificada
  public Professor getProfessor(int indiceLinha){
	  return linhas.get(indiceLinha);
  }
  
// Adiciona o sócio especificado ao modelo
  public void addProfessor(Professor professor) {
      // Adiciona o registro.
      linhas.add(professor);
   
      // Pega a quantidade de registros e subtrai 1 para
      // achar o último índice. A subtração é necessária
      // porque os índices começam em zero.
      int ultimoIndice = getRowCount() - 1;
   
      // Notifica a mudança.
      fireTableRowsInserted(ultimoIndice, ultimoIndice);
  }
   
  // Remove o sócio da linha especificada.
  public void removeProfessor(int indiceLinha) {
      // Remove o registro.
      linhas.remove(indiceLinha);
   
      // Notifica a mudança.
      fireTableRowsDeleted(indiceLinha, indiceLinha);
  }
   
  // Adiciona uma lista de sócios no final da lista.
  public void addListaDeProfessores(List<Professor> professor) {
      // Pega o tamanho antigo da tabela, que servirá
      // como índice para o primeiro dos novos registros
      int indice = getRowCount();
   
      // Adiciona os registros.
      linhas.addAll(professor);
   
      // Notifica a mudança.
      fireTableRowsInserted(indice, indice + professor.size());
  }
   
  // Remove todos os registros.
  public void limpar() {
      // Remove todos os elementos da lista de sócios.
      linhas.clear();
   
      // Notifica a mudança.
      fireTableDataChanged();
  }

	
}[/code]

Uma ultima dúvida, há como eu colocar um “modo automático” nas linhas onde elas vão se redimensionar de acordo com o tamanho do campo?
Obrigado
Abs

up…