Ícone em célula da JTable

7 respostas
U

Como faço pra atribuir 1 ícone à celula da coluna da tabela relativa ao atributo Armazenado do BD (CD ou BD).

Explicando melhor: Se o dado do cliente A estiver em CD tenho q exibir na coluna 1 (coluna que aparecerá o ícone) um ícone que é um CDsinho, senão, se for BD tenho q exibir o ícone de um repositório de dados…

Não estou conseguindo fazer.

7 Respostas

J

Nunca precisei fazer exatamente isso que vc quer, mas vê se esse exemplo do site da sun te ajuda
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

U

Esse exemplo do site eu entendi, o problema é que um ImageIcon não faz parte dos componetes suportados pelo DefaultCellEditor.

J

Dá uma olhada nesse código que eu achei nesse site:
http://www.recomende.com/arquivo/visualizar_dica.php?qual_dica=563

import javax.swing.*;
import java.awt.*;
import javax.swing.table.*;

public class NovaClasse extends JFrame{
    
  public NovaClasse(){
    super("Exemplo de uma tabela simples");
		
    // colunas da tabela
    String[] colunas = {"Nome", "Idade", "Sexo"};
		
    // conteúdo da tabela	
    Object[][] conteudo = {
        {"Osmar J. Silva", "32", "Masculino"},
        {"Maria Clara Gomes", "19", "Feminino"},
        {"Fernando Gomes", "15", "Masculino"},
        {"Carlos Vieira", "40", "Masculino"}
    };
        
    // constrói a tabela
    JTable tabela = new JTable(conteudo, colunas);
    
    // quero exibir imagens ao lado do texto da primeira coluna
    TableCellRenderer tcr = new Imagem();
    TableColumn column = tabela.getColumnModel().getColumn(0);
	column.setCellRenderer(tcr);
 
    tabela.setPreferredScrollableViewportSize(new Dimension(350, 50));
	
    Container c = getContentPane();
    c.setLayout(new FlowLayout());
			
    JScrollPane scrollPane = new JScrollPane(tabela);
    c.add(scrollPane);
    	
    setSize(400, 300);
    setVisible(true);
  }
	
  public static void main(String args[]){
    NovaClasse app = new NovaClasse();
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

class Imagem extends JLabel implements TableCellRenderer{
  public Imagem(){
  	setOpaque(true);
  }
  
  public Component getTableCellRendererComponent(JTable table, 
     Object value, boolean isSelected, boolean hasFocus, int row, 
     int column){
    
     Icon imagem = new ImageIcon("icon.gif");
     // certifique-se da existencia da imagem "icon.gif" antes de executar
    
     if(isSelected)
       setBackground(table.getSelectionBackground());
     else
       setBackground(table.getBackground());		
     
     setIcon(imagem);
     setText(value.toString());
     	
     return this;   	
  }
  
  public void validate() {}
  public void revalidate() {}
  protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) {}
  public void firePropertyChange(String propertyName, boolean oldValue, boolean newValue) {}  
}
U

OK, consegui implementar o código no meu projeto.

// quero exibir imagens ao lado do texto da primeira coluna TableCellRenderer tcr = new Imagem(); TableColumn column = tabela.getColumnModel().getColumn(0); column.setCellRenderer(tcr);

Porém, esse código seta 1 único ícone para todas as linhas da tabela. O que preciso é: Pra cada linha setar 1 ícone diferente de acordo com o valor do atributo no banco de dados.

W

Estou com o mesmo problema… Infelizmente o renderer insere o ícone da imagem em todas as colunas… Eu queria inserir o ícone em apenas uma célula, ou desenhar usando Graphics (qnd tento o desenho é apagado ao mover a janela).

W

Encontrei o tal comando “setCellEditor”, que talvez resolva este caso… mas tá complicado conseguir usar ele…

W

No meu caso podia ser desenho ao invés de ícone…

Resolvido:
http://www.guj.com.br/posts/list/0/55314.java#292964

Criado 28 de dezembro de 2006
Ultima resposta 28 de mar. de 2007
Respostas 7
Participantes 3