JTable, o coisa complicada

Ola pessoal, venho aqui pedir a ajuda de voces, pois estou apanhando muitoooooooooooo com o JTable e preciso dele pra fazr minhas consultas nos meus futuros projetos em Java. são varias dúvidas, vou tentar explicar tudo.
tenho a classe Tabela que extende JFrame onde eu crio a tela, os JTextField, os JButtons e onde vou adicionar o JTable, dentro dessa classe eu declaro JTable tabela.
a minha tabela fica em outra classe chamada ModeloTabela que extende AbstractTableModel.
No começo da ModeloTabela eu coloquei duas variaveis

String [] vTitulo = {"Código","Nome","Cidade"};
	Object [][] vCampos = {{"","",""},{"","",""},{"","",""}};

o vTitulo seria os titulos do JTable e vCampos os campos da Celula inicialmente com 3 linhas em branco… legal, quando eu rodo o Programa cria a JTable, mas o Titulo não aparece Codigo, Nome, Cidade… e Sim A, B, C, porque?

Continuando a classe, eu tenho um método chamado selecionarDados(), o objetivo dele é trazer todas as informacoes do banco de Dados.
ae vai o código

	public void selecionarDados() {
		try {
		  DataModulo DM = new DataModulo();
  		Statement query = DM.conexao.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
  		ResultSet rs = query.executeQuery("Select * from TESTE");
  		int i = 0;
  		while (rs.next()) {
				vCampos[i][0] = Integer.toString(rs.getInt(1));
				vCampos[i][1] = rs.getString(2);
				vCampos[i][2] = rs.getString(3);
			  i++;
			}
		} catch (SQLException erro) {
			erro.printStackTrace();
			JOptionPane.showMessageDialog(new JFrame(),"Erro no SQL");
		}

Ele faz o SQL perfeito, mas tem um problema… a variavel vCampos foi criada com 3 linhas, se na minha consulta tiver 4 linhas da erro…
Pergunta… tem jeito de eu criar uma variavel Array to Array a vCampos, com linhas infinitas? pois assim resolveria meu problema…ou existe um jeito mais facil? como vcs trabalham???

Outra pergunta… suponho que tenha 3 linhas de resultado… as informações não aparece no JTable, apenas se eu for nele e clicar com o mouse em cima… existe algum jeito de atualizar sem precisar clicar?

Se alguem tiver um exemplo simples de JTable com consulta assim, poderiam me enviar pra ajudar
pode enviar pro meu email mesmo desse nick, o email é alex.lopes2000@bol.com.br

Obrigado a ajuda de todos

Oba!

Alex, o melhor é extender DefaultTableModel, amenos que vc pretenda fazer alterações profundas. De qq modo, um protótipo com o DefaultTableModel sai bem mais rápido.

Outra maneira bem forte de fazer é mapear a sua tabela para um objeto. Por exemplo, se vc tem 3 colunas, Código, Nome e Cidade, vc pode ter uma classe interna ao seu model como a seguinte:

  protected static class UmaLinha {
    private int codigo;
    private String nome;
    private String cidade;

    public Object getCodigo() {
      return new Integer(codigo);
    }
    public Object getNome() {
      return nome;
    }
    public Object getCidade() {
      return cidade;
    }
  }

O que vc acabou de fazer?? Um registro em Java. Se vc quer fazer um JTable só de leitura, tá pronto. Se vc mais tarde quiser utilizar a mesma tabela para leitura e escrita, vc consegue.

Como a única manipulação que vc pretende fazer é chamar o toString(), Object é ótimo. Vc vai mexer no seu table model assim:

  private List rows;

  public void setRows(List l) {
    rows = l;
    fireTableDataChanged();
  }

  public int getRowCount() {
    if (rows == null) return 0;
    else return rows.size();
  }

  public Object getValueAt(int row, int col) {
    UmaLinha linha = (UmaLinha) rows.get(row);
    switch(col) {
      case 0: return linha.getCodigo();
      case 1: return linha.getNome();
      case 2: return linha.getCidade();
    }
  }

Assim vc resolve todos os seus problemas: fireTableDataChanged() diz pro seu View (o objeto que desenha a tabela) que o conteúdo da tabela mudou e ela precisa ser redesenhada. Com essa combinação de List e UmaLinha, vc resolve o problema de mudar a query e ainda ter o que mostrar.

boa sorte!!