Ajuda para abandonar DefaultTableModel

Boa tarde!

Acompanhando os conselhos dos companheiros do GUJ, percebi que é inevitável implantar nosso próprio TableModel, e impossível pensar grande com DefaultTableModel. Exemplo de um problema que esbarrei: a data do banco de dados sai na minha tabela com o tipo yyyy-mm-dd.

Neste início de aprendizado, estou entendendo os conceitos da TableModel, mas tenho uma dúvida [b]BEM IDIOTA[/b], e gostaria que me ajudassem, pois não achei exemplos específicos sobre isso: sou muito dependente do NetBeans para “desenhar” meus programas. Ao importar uma tabela para meu JFrame, como faço para que esta tabela utilize o modelo de meu TableModel criado?

Agradeço pela ajuda!


 DefaultTableModel nome_do_modelo = (DefaultTableModel) nome_da_tabela.getModel();

Chame o método setModel() da JTable passando o seu TableModel especializado:

http://download.oracle.com/javase/6/docs/api/javax/swing/JTable.html#setModel(javax.swing.table.TableModel)

SE não me engano, no netbeans, você deve clicar sobre o JTable (não sobre o Scrollpane, que tem o JTable). Ir até a opção tablemodel. Provavelmente em algum lugar por ali (não lembro onde) existe a opção de definir a propriedade através de código do usuário.

Aí vc escreve:

new SeuTableModel();

Onde SeuTableModel é o nome do seu modelo.

Não sei dizer ao certo pois sou usuário de Eclipse, mas já usei essa opção no Netbeans uma vez ou outra.

O table model é uma das coisas mais lindas do Swing, já o DefaultTableModel uma das mais horríveis.

É muito fácil. Basta que você crie uma classe que extenda javax.swing.table.AbstractTableModel.

Você terá de implementar apenas os seguintes métodos:

getRowCount -> Quantas linhas sua tabela tem

getColumnCount -> Quantas colunas sua tabela tem

getValueAt(int row, int column), com base na linha e na coluna, você fornece o Object que representa aquela célula

Se quiser, pode também melhorar a sua interface dando nomes às colunas. Basta implementar a função getColumnName(int column).

Sinceramente, me arrependo de ter começado a trabalhar com tabelas do “jeito fácil”, com DefaultTableModel. O problema é que exatamente neste momento em que preciso aperfeiçoar meus programas, esbarrei em várias limitações.

Com ajuda de vocês, consegui da seguinte forma:

ClienteTableModel tabela = new ClienteTableModel();

// Após inserir a JTable no JFrame, clica-se com o botão direito do mouse na tabela e selecione PROPRIEDADES, na opção MODELO escolha a combinação CÓDIGO PERSONALIZADO e escreva o nome atribuído ao TableModel, neste caso, "tabela".
jTable1 = new javax.swing.JTable();
jTable1.setModel(tabela);

Obrigado pela ajuda!

[quote=kicolobo]O table model é uma das coisas mais lindas do Swing, já o DefaultTableModel uma das mais horríveis.

É muito fácil. Basta que você crie uma classe que extenda javax.swing.table.AbstractTableModel.

Você terá de implementar apenas os seguintes métodos:

getRowCount -> Quantas linhas sua tabela tem

getColumnCount -> Quantas colunas sua tabela tem

getValueAt(int row, int column), com base na linha e na coluna, você fornece o Object que representa aquela célula

Se quiser, pode também melhorar a sua interface dando nomes às colunas. Basta implementar a função getColumnName(int column).
[/quote]

Depois de trabalhar com outras plataformas, em particular Adobe Air, pra mim o Swing não tem nada de bonito, em relação ao funcionamento default de seus componentes :twisted:

O Default dele realmente é péssimo. Mas seria estranho se o Air (que veio depois) fosse pior.