AbstractTableModel

[color=blue]
Com uma ajudona consegui rodar o programa e as imagens aparecem no JFrame, porém as imagens tem 32x32, e essas dimensões não são preservadas. Quando estão na tabela elas alargam na horizontal e são cortadas na vertical. Ajudem-me a consertar isso.
[/color]

package jogo;

import java.util.List;

import javax.swing.table.AbstractTableModel;

public class MinhaTabela extends AbstractTableModel {
	
	private List<MinhaImagem> datalist;
	
	public MinhaTabela(List<MinhaImagem> imagemLetra)
	{
		datalist = imagemLetra;
	}
	public int getRowCount()
	{
		return 1;
	}
	public int getColumnCount()
	{
		return datalist.size();
	}

	public Object getValueAt(int row, int col)
	{
		return datalist.get(col);		   
	}
	
	//-----MEUS METODOS----//
	public char getColAt(int col)
	{
		return datalist.get(col).getLetra();
	}
	
	public void removeColAt(int col)
	{
		datalist.remove(col);
		fireTableDataChanged();
	}
	
	public void add(MinhaImagem imagem)
	{
		datalist.add(imagem);
		fireTableDataChanged();
	}
	
	@Override
	public Class<?> getColumnClass(int columnIndex) {
		return MinhaImagem.class;
	}

}

Quem controla o view da sua tabela é a classe JTable.

A divisão de tarefas é assim:

  1. JTable -> Controla a view da tabela: ordenação de colunas, ordenação das linhas, highlight, tamanho da célula;
  2. TableModel -> Diz que dados serão exibidos na tabela. Quantas linhas e que informação vai em cada coluna. Também pode sugerir o nome da coluna;
  3. TableCellRenderer -> É o componente que o JTable usa para efetivamente desenhar a célula;
  4. TableCellEditor -> É o componente que o JTable usa para editar a célula;
  5. TableColumn -> Contém informações sobre uma coluna.

Então, vc deve procurar pela altura da linha no JTable e pela largura da coluna no TableColumn:

suaTable.setRowHeigth(32);
for (int i = 0; i < suaTable.getColumnCount(); i++)
   suaTable.getColumnModel().getColumn(i).setPreferredWidth(32);

Para que o cabeçalho da sua Table apareça, não esqueça de coloca-la num JScrollPane.
Sem isso, vc também não terá barras de rolagem.

[color=blue]
hum…a altura mudou, porém a largura não.
Meu JFrame tem 500x500 e tem como layout um BorderLayout; eu coloco a tabela no SOUTH, e ela acaba se ajustando à largura do frame (500), então se eu colocar na tabela duas imagens de 32x32, elas vão se expandir para chegar nos 500…tem como mudar isso?
[/color]

Ah, tem outro detalhezinho. Por padrão, a tabela redimensiona automaticamente as colunas.

Deligue isso.

suaTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

[color=blue]

Não deu certo.
Tenho o JFrame, vou dividi-lo em 3 partes; para isso setei o layout do JFrame sendo o BorderLayout (pq tenho NORTH, CENTER, SOUTH). Na parte SOUTH eu coloco a “MinhaTabela”.
Bom, só expliquei melhor, pq pode ser (não sei) o tipo de layout que estou usando…


|________________________________
|
|
|
|
|_________________________________
| A TABELA OCUPA TODO ESSE ESPAÇO
|_________________________________

[/color]

[color=blue]


|________________________
|
|
|
|
|
|
|
|…___________
|…|__________|
|__________________________

–>Queria que ela ficasse ali naquele retangulo.

[/color]

Já pensou em baixar o Netbeans e usar o matisse do Netbeans? Aí vc só arrastaria e soltaria a tabela, além de usar o mouse para definir seu tamanho.

Outra alternativa seria colocar um JPanel com um GridLayout de 3 colunas na parte debaixo e deixar a tabela no meio.
Ou, se for para ajustar com mais cuidado o tamanho, use o GridBagLayout, mas cuidado, é complexo. Antes aprenda a usa-lo direitinho.

ViniGodoy

Seguindo seu conselho sobre o AbsTractTableModel. Estou com esse código que esta funcionando tranquilo.

public void fnCarregaGrid(String[] vCol, Vector rData) throws SQLException, ParseException {

    //URL situacao = null;
    //URL editar = this.getClass().getResource("/sistema/imagens/table_edit24.png");
    //URL excluir = this.getClass().getResource("/sistema/imagens/table_delete24.png");

    //Defini as colunas
    //final String[] colunas = {"id", "Código", "Descrição"};
    final String[] colunas = vCol;

    final Vector rowDatas = new Vector();
    rowDatas.addAll(rData);

    TableModel dataModel = new AbstractTableModel() {

        public int getColumnCount() {
            //return data[0].length;
            return colunas.length;
        }

        public int getRowCount() {
            //return data.length;
            return rowDatas.size();
        }

        public Object getValueAt(int row, int col) {
            //return data[row][col];
            return ((Vector) rowDatas.elementAt(row)).elementAt(col);
        }

        public String getColumnName(int column) {
            //return "" + column;
            return colunas[column];
        }

        public Class getColumnClass(int c) {
            return getValueAt(0, c).getClass();
        }

        public boolean isCellEditable(int row, int col) {
            //return col != 2; //Escolha a coluna que não vai ser editável
            return false; //Bloquea todas as colunas
        }

        public void setValueAt(Object aValue, int row, int column) {
            //data[row][column] = aValue;
            ((Vector) rowDatas.elementAt(row)).setElementAt(aValue, column);
        }
    };

    tabLista.setModel(dataModel);
    tabLista.setRowHeight(20);

    tabLista.getColumnModel().getColumn(0).setMinWidth(0);
    tabLista.getColumnModel().getColumn(0).setMaxWidth(0);
    tabLista.getColumnModel().getColumn(1).setPreferredWidth(70);
    tabLista.getColumnModel().getColumn(2).setPreferredWidth(480);
    tabLista.getColumnModel().getColumn(3).setPreferredWidth(80);
    tabLista.getColumnModel().getColumn(4).setPreferredWidth(50);


}//fim do carrega grid

Agora estou precisando colocar a opção de ordenar o Jtable ao clicar na coluna desejada. só que se eu marcar a opção autoCreateRowSorter dar o seguinte erro java.lang.ArrayIndexOutOfBoundsException: 0 >= 0

Só funciona se eu deixar essa opção como false.

Como tenho que fazer para colocar essa ordenação no JTable?

Esse TableModel está bem longe de parecer com os que eu recomendo. Dê uma olhada nesses links e altere-o:
http://www.guj.com.br/posts/list/149034.java#808003
http://www.guj.com.br/posts/list/225793.java#1156821

Note que internamente, no TableModel, usamos lists com o tipo da classe em questão.
Haverá um objeto da classe por linha.

ViniGodoy, achei esses exemplos que você passou muito complicado para um iniciante como eu…

O meu código esta funcionando, consigo adicionar imagens e nos exemplos não consegui.

Uma coisa que não ficou claro pra mim… em um exemplo o cara colocou uma classe sócio com os nomes das colunas… então pra cada vez que utilizar o jTable tenho que criar outra classe?

Se eu consegui com o meu código fazer o jTable ordenar pela coluna que foi clicada no momento ficaria 100%

Sim, tem que criar o TableModel.
Ele facilita muito o processo. Mas veja, mesmo com o DefaultTableModel, seu código também existirá, mas estará espalhado em dezenas de métodos de botão, e não será tão otimizado ou fácil de fazer.