Morte definitiva ao default table model

Sim.

Imagina que eu tenho um resultset e já quero inicicia-lo na tabela:

Eu tenho minha classe assim:

	import java.sql.SQLException;
import java.util.ArrayList;
	import java.util.List;
import javax.swing.table.AbstractTableModel;

	public class ModeloTabela extends AbstractTableModel {
		
		private static final long serialVersionUID = 1L;
		DAO DAO = new DAO();
		
		private String[] colunas = {"ID Componente", "Componente", "Servidor de Origem", "Servidor de Destino", "Alias do Componente", "Ordem de Origem", "Ordem de Destino"};
		

		/* Lista de Sócios que representam as resultado. */
		private List<InfraBridge> resultado;
		
		public ModeloTabela() throws SQLException {
			resultado = DAO.consulta();
		}


		/* Retorna a quantidade de colunas. */
		@Override
		public int getColumnCount() {
			// Está retornando o tamanho do array "colunas".
			// Mas como o array é fixo, vai sempre retornar 4.
			return colunas.length;
		}

		/* Retorna a quantidade de resultado. */
		@Override
		public int getRowCount() {
			// Retorna o tamanho da lista de sócios.
			return resultado.size();
		}

		/* Retorna o nome da coluna no índice especificado.
		 * Este método é usado pela JTable para saber o texto do cabeçalho. */
		@Override
		public String getColumnName(int columnIndex) {
			// Retorna o conteúdo do Array que possui o nome das colunas
			// no índice especificado.
			return colunas[columnIndex];
		};

		/* Retorna a classe dos elementos da coluna especificada.
		 * Este método é usado pela JTable na hora de definir o editor da célula. */
		@Override
		public Class<?> getColumnClass(int columnIndex) {
			// Retorna a classe referente a coluna especificada.
			// Aqui é feito um switch para verificar qual é a coluna
			// e retornar o tipo adequado. As colunas são as mesmas
			// que foram especificadas no array "colunas".
			switch (columnIndex) {
			case 0: // Primeira coluna é o nome, que é uma String.
				return int.class;
			case 1: // Segunda coluna é o telefone, que também é uma String..
				return String.class;
			case 2: // Terceira coluna é a data de cadastro,
					// apesar de ser do tipo Calendar,
					// estou retornando Date por causa da formatação.
				return String.class;
			case 3: // Quarta coluna é a mensalidade, um double.
				return String.class;
			case 4: // Quarta coluna é a mensalidade, um double.
				return String.class;
			case 5: // Quarta coluna é a mensalidade, um double.
				return int.class;
			case 6: // Quarta coluna é a mensalidade, um double.
				return int.class;
			default:
				// Se o índice da coluna não for válido, lança um
				// IndexOutOfBoundsException (Exceção de índice fora dos limites).
				// Não foi necessário verificar se o índice da linha é inválido,
				// pois o próprio ArrayList lança a exceção caso seja inválido.
				throw new IndexOutOfBoundsException("columnIndex out of bounds");
			}
		}

		/* Retorna o valor da célula especificada
		 * pelos índices da linha e da coluna. */
		@Override
		public Object getValueAt(int rowIndex, int columnIndex) {
			// Pega o sócio da linha especificada.
			InfraBridge infraBridge = resultado.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ão as mesmas
			// que foram especificadas no array "colunas".
			switch (columnIndex) {
			case 0: // Primeira coluna é o nome.
				return infraBridge.getidComponente();
			case 1: // Segunda coluna é o telefone.
				return infraBridge.getComponente();
			case 2: // Terceira coluna é a data de cadastro.
				return infraBridge.getServidorOrigem();
			case 3: // Quarta coluna é a mensalidade.
				return infraBridge.getServidorDestino();
			case 4: // Quarta coluna é a mensalidade.
				return infraBridge.getAliasComponente();
			case 5: // Quarta coluna é a mensalidade.
				return infraBridge.getOrdem1();
			case 6: // Quarta coluna é a mensalidade.
				return infraBridge.getOrdem2();
			default:
				// Se o índice da coluna não for válido, lança um
				// IndexOutOfBoundsException (Exceção de índice fora dos limites).
				// Não foi necessário verificar se o índice da linha é inválido,
				// pois o próprio ArrayList lança a exceção caso seja inválido.
				throw new IndexOutOfBoundsException("columnIndex out of bounds");
			}
		}

		
	}

Está errado???

Seu TableModel não deve ser responsavel por consultar dados no banco de dados. Prefira trabalahr com listas e o resultado poderá vir de qualquer lugar.

Olá pessoal, estou tentando utilizar o AbstractTableModel, porém, estou com problemas ao inserir um dado na tabela. Ela não está atualizando.

Bom na janela onde fica a tabela eu chamo a tela de inserção:

InserirMarcaGui im = new InserirMarcaGui(); im.setVisible(true);

Na tela de inserção botão salvar:

[code] private void botaoSalvarActionPerformed(java.awt.event.ActionEvent evt) {
Marca m = new Marca();
if (txNome.getText().length() > 0) {
m.setNome(txNome.getText());
MarcaTableModel mtb = new MarcaTableModel();
mtb.addMarca(m);
MarcaController mc = new MarcaController();
mc.cadastrar(m);

        dispose();


    }
}[/code]

Não consigo encontrar o erro. Está salvando no banco de dados. Porém a tabela não atualiza. Tenho que fechar a janela para visualizar a modificação.

Pessoal, já consegui resolver.

Você está criando um model novo, atualize o já existente.

  if (txNome.getText().length() > 0) {  
        m.setNome(txNome.getText());  
        MarcaTableModel mtb = jTable.getModel();  
        mtb.addMarca(m);  
        mtb.notifyDataSetChanged();
        MarcaController mc = new MarcaController();  
        mc.cadastrar(m);  
  
        dispose();  
  
  
    }  

É Marky.Vasconcelos perdi um tempão por um erro tão besta. Mas já está tudo ok.

Obrigada pela ajuda.

Caramba já havia estudado DefaultTableModel e não consegui implementar mas agora com esse tópico consegui implementar a tabela do jeito certo. obrigado

Muito mais fácil criar o seu próprio tableModel.

Eu o tenho usado como um classe intermediária entre o a minha BO e a swing. Está certo usá-la desse jeito?
E se eu quiser que no meu JTable apareça menos campos do que tem na minha tabela? por exemplo:

Tabela: PKID_CODIGO, VALOR, DESCRICAO, FKID_ITEM, FKID_GRUPO, FKID_CONTA

e no meu JTable eu só quero que apareça: DESCRICAO, VALOR E FKID_ITEM.

como seria isso? é possível?

Como posso usar um TableModel personalizado com uma JList?

Não é tão simples, e nem envolve necessariamente o TableModel personalizado.
a) Preencher um JList com os valores possíveis da coluna;
b) Criar um TableCellEditor que trabalhe com o List;
c) Associar o TableCellEditor a coluna em questão.

Leia mais em: http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#editrender

Vou dar uma analisada na documentacao
Muito obrigado pela atencao