Imagem no jTable

7 respostas
douglasduarte360

Pessoal não estou conseguindo colocar imagem na celula da tabela
tenho o sequinte metodo

public ArrayList<Cursos> list() throws SQLException{
   ArrayList<Cursos> listar = new ArrayList<>();   
  stmt = connection.createStatement();
      resultset = null;
      try {
	  Icon editar = new ImageIcon("D:/IMAGENS/editar.jpg");  
          Icon excluir = new ImageIcon("D:/IMAGENS/excluir.jpg"); 
          
          
          PreparedStatement sql = connection.prepareStatement("SELECT * FROM Cursos");
	   resultset = sql.executeQuery();
	   while(resultset.next()){
	    Cursos cliente = new Cursos();
            
            
	    cliente.setId(resultset.getLong("ID"));
	    cliente.setCursos(resultset.getString("Cursos"));
            cliente.setvEditar(editar);
            cliente.setvExcluir(excluir);
            listar.add(cliente);
     

            
            
            	    
	   }
	  } catch (SQLException e) {
  }
      

   
     return listar;
    
  }

Porem ao Invez de aparecer a imagem esta aparecendo o texto "D:/IMAGENS/editar.jpg"

o que esta de errado no metodo ?

7 Respostas

ViniGodoy

Como está implementado seu TableModel?
E você adicionou um CellRenderer na célula em questão?

douglasduarte360
Estou implementando assim:
public Class<?> getColumnClass(int columnIndex){  
  
        switch (columnIndex){  
            case 0:  
                return String.class;  
            case 1:  
                return String.class;  
            case 2:  
                return Image.class;  
            case 3:  
                return Image.class;  
            default:  
                throw new IndexOutOfBoundsException("ColumnIndex out of bounds");  
        }  
    }
    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Cursos curso = listacursos.get(rowIndex);
        switch(columnIndex){
            case 0: return curso.getId();
            case 1: return curso.getCursos();
            case 2: return curso.getvEditar();
            case 3: return curso.getvExcluir();
                   
        
        }
        return null;
Classe JTableRenderer
import javax.swing.ImageIcon;
import javax.swing.table.DefaultTableCellRenderer;

/**
 *
 * @author dhenrique
 */
public class JTableRenderer extends DefaultTableCellRenderer{
    @Override
    protected void setValue(Object value){
    if(value instanceof ImageIcon){
    if(value != null){
    ImageIcon d = (ImageIcon) value;
    setIcon(d);
    }else{
    setText("");
    setIcon(null);
    }
    
    }else{
    super.setValue(value);
    }
    
    }//fim função
    
    
}
ViniGodoy

E você chamou um:

seuTable.setDefaultRenderer(Image.class, new JTableRenderer());

em algum lugar?

douglasduarte360

Chamei não Viny…

onde devo exatamente chamar ?

ViniGodoy

Na verdade, esse renderer está errado também, você deveria sobrescrever o método getTableCellRendererComponent e não o setValue.

ViniGodoy

douglasduarte360:
Chamei não Viny…

onde devo exatamente chamar ?

Na criação da Tabela. Você tem que avisar a ela que para desenhar o Image.class é necessário usar esse Renderer aí. É esse método que “liga” a classe retornada pelo getColumnClass ao Renderer, entendeu?

douglasduarte360

Obrigado ViniGodoy consegui
só chamei o

jTableCursos.setDefaultRenderer(Image.class, new JTableRenderer());

no construtor da tabela e deu certo.

Criado 22 de janeiro de 2013
Ultima resposta 22 de jan. de 2013
Respostas 7
Participantes 2