Re:AJUDA - JTable com IMAGEM

É possível, e nem é muito difícil. Basta escrever um CellRenderer personalizado.
Procure sobre o assunto.

Comece estendendo a interface CellRenderer. Basicamente, você tem que retornar um JLabel com uma imagem ou com outra, dependendo da seleção.

Uma boa idéia é ver como o DefaultCellRenderer é implementado.

Peraí… vc não quer simplesmente trocar a imagem. Você quer trocar o valor da célula. Isso é completamente diferente do que você pediu.

Trocar a imagem envolve mexer só na representação visual de um valor. É isso que o CellRenderer faz.

Alteração de valor já é um outro departamento, pertencente ao TableModel. Seu TableModel, atualmente, não é editável. O primeiro passo seria torna-lo editável. Ao invés de uma imagem de check, você poderia usar um checkbox mesmo. Basta fazer a coluna retornar um Boolean.class.

Se vc ainda quiser usar a imagem, capture o evento do click do mouse na tabela, e altere o valor do model caso ele tenha clicado na célula correspondente.

Então beleza…

O cellRenderer recebe dois parâmetros interessante para isso.

O primeiro é o isSelected. Use-o para testar se a linha foi selecionada (tem aquela barra azul em cima).
O segundo é o hasFocus. Marca true se a célula for a selecionada (tem as bordas mais escuras na tabela).

Agora é só testar esses valores com if e retornar a imagem correta.

Pessoal preciso criar uma tela onde tenho um jtable e em algumas colunas tenho imagens, e quando clicar sobre a celula que contem imagem, trocar a imagem atual por uma outra, é possivel fazer isso? eu não tenho nem idéia de como fazer isso, nem de como começar, já que a jtable vai ser preenchida com dados do banco!

Alguém pode me ajudar!
Sou iniciante em JAVA! infelizmente!

Tem muitas coisas sobre o assunto, e não sei por onde começar!

Algum exemplo?

A primeira vez que abro o frame onde está a jtable ele entra aqui na classe CustomTableCellRenderer e preenche corretamente.
Como implemento a alteração da imagem quando clicar na celular?
Se estiver com a celular com a figura check.gif, como alterar para a figura uncheck.gif?
Código Fonte das Classes

Implementação do DefaultTableCellRenderer

[code]import java.awt.Component;
import java.awt.Color;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.ImageIcon;

public class CustomTableCellRenderer extends DefaultTableCellRenderer
{
private ImageIcon iconeCheck = new ImageIcon(this.getClass().getResource(“ckeck.gif”));
private ImageIcon iconeUncheck = new ImageIcon(this.getClass().getResource(“unckeck.gif”));

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
   boolean hasFocus, int row, int column) 
{
    Component cell = super.getTableCellRendererComponent
       (table, value, isSelected, hasFocus, row, column);
	
    if( value instanceof Integer )
    {
        Integer amount = (Integer) value;
        if( amount.intValue() == 0 )
        {
            setBackground(Color.white);
            setIcon(iconeUncheck);
        }
        else if( amount.intValue() == 1 )
        {
            setBackground(Color.white);
            setIcon(iconeCheck);
        }
        else if( amount.intValue() == 2 )
        {
            setBackground(Color.RED);
            setIcon(null);
        }

    }		
    return this;
}

}[/code]

Implementação da classe AbstractTableModel

[code]import javax.swing.table.AbstractTableModel;

public class ExampleTableModel extends AbstractTableModel
{
private final String[] columnNames = { “Month”, “Income” };

final Object[][] data = {
    {"January",   new Integer(0)},
    {"February",  new Integer(1)},
    {"March",     new Integer(1)},
    {"April",     new Integer(0)},
    {"May",       new Integer(2)},
    {"June",      new Integer(1)},
    {"July",      new Integer(0)},
    {"August",    new Integer(1)},
    {"September", new Integer(2)},
    {"October",   new Integer(0)},
    {"November",  new Integer(1)},
    {"December",  new Integer(1)} 
};

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

public int getColumnCount() 
{
    return columnNames.length;
}

public String getColumnName( int column ) 
{
    return columnNames[column];
}

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

public Object getValueAt( int row, int column ) 
{
    System.out.println("data[row][column]: "+data[row][column]);
    return data[row][column];
}

}[/code]

Implementação da classe TableCellExample

[code]import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.table.TableCellRenderer;
import javax.swing.JFrame;
import javax.swing.JTable;

public class TableCellExample
{
public static void main( String[] args )
{
JTable table = new JTable( new ExampleTableModel() );
TableCellRenderer renderer = new CustomTableCellRenderer();

    try
    {
        table.setDefaultRenderer( Class.forName
           ( "java.lang.Integer" ), renderer );
    }
    catch( ClassNotFoundException ex )
    {
        System.exit( 0 );
    }

    JFrame frame = new JFrame();
    frame.addWindowListener( 
        new WindowAdapter() 
        {
            public void windowClosing(WindowEvent e) 
            {
                System.exit(0);
            }
        }
    );

    frame.getContentPane().add( table );
    frame.pack();
    frame.setVisible( true );

}

}[/code]

Eu quero trocar a imagem que está na célula o valor não!