Ícone dentro de um JTable

1 resposta
B

Galera,

Preciso colocar um ícone dentro de uma tabela, porém esse ícone deve ser um para cada tipo de resultado.

Ex: Se status retorna L aparece um ícone x
Se status retorna N aparece um ícone y

Podem me dar alguma ideia?

1 Resposta

fabim

Seus probremas se acabaram…

O “quê”, e de que jeito sera exibido na celula da JTable pode ser alterado facilmente, criando uma classe que extenda JLabel e implemente TableCellRenderer… depois basta aplicar à sua tabela:

Segue exemplo abaixo:

package adm.util.componentes;

import java.awt.Color;
import java.awt.Component;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.border.Border;
import javax.swing.table.TableCellRenderer;

import adm.dominio.SinalizadorSituacao;

public class SituacaoOrdemCellRenderer extends JLabel implements TableCellRenderer {
	
	private static final long serialVersionUID = 1L;

	Border unselectedBorder = null;

	Border selectedBorder = null;

	boolean isBordered = true;

	public SituacaoOrdemCellRenderer(boolean isBordered) {
		this.isBordered = isBordered;
		setOpaque(false);
	}

	public Component getTableCellRendererComponent(JTable table, Object object,
		boolean isSelected, boolean hasFocus, int row, int column) {
		
		String situacao = ( (String)object );
		
		if (isBordered) {
			if (isSelected) {
				if (selectedBorder == null) {
					selectedBorder = BorderFactory.createMatteBorder(1, 2, 1,
						2, table.getSelectionBackground());
				}
				setBorder(selectedBorder);
			} else {
				if (unselectedBorder == null) {
					unselectedBorder = BorderFactory.createMatteBorder(1, 2, 1,
						2, table.getBackground());
				}
				setBorder(unselectedBorder);
			}
		}
		
		setToolTipText( situacao );
		
		if ( situacao.contains( "EM CADASTRAMENTO" ))
			setIcon(new ImageIcon(getClass().getResource("/adm/imagens/editar.png")));
		if ( situacao.contains( "SINCRONIZAÇÃO" ))
			setIcon(new ImageIcon(getClass().getResource("/adm/imagens/sincronizar.png")));
		if ( situacao.contains( "AGUARDANDO CUMPRIMENTO" ))
			setIcon(new ImageIcon(getClass().getResource("/adm/imagens/cadeado-aberto.png")));
		if ( situacao.contains( "CUMPRIDA" ))
			setIcon(new ImageIcon(getClass().getResource("/adm/imagens/cadeado-fechado.png")));
		if ( situacao.contains( "CANCELADA" ))
			setIcon(new ImageIcon(getClass().getResource("/adm/imagens/cancelar.png")));
		if ( situacao.contains( "EM USO" ))
			setIcon( null );
		
		setHorizontalAlignment( JLabel.CENTER );	
		
		return this;
	}
}
this.tabResultadoConsulta.getColumnModel().getColumn(5).setCellRenderer( new SituacaoOrdemCellRenderer( true ) );

...

table.addRow(new Object[] {
							Util.formataData(informacao.getDataexpedicao()),
							informacao.getTipoordeminformacao().getDescricao(),
							informacao, 
							"",
							informacao.getStringtipificacoes(),
							situacao
						});

...

E isso ainda pode ser melhorado… em vez de “situacao” ser String, pode ser um objeto, que contem id e talz, pra tu fazer switch em vez de umonte de if… e blablabla…

N possibilidades :wink:

Criado 2 de julho de 2007
Ultima resposta 2 de jul. de 2007
Respostas 1
Participantes 2