Amigos do forum, tenho tentado colocar icone em uma celula de uma jtable, que esta vinculada a uma list ( quem ja viu o curso siscom java da t2ti sabe do que me refiro).
Então eu pesquisei em diversos foruns e blogs e encontrei diversos codigos que faziam oq procuro, mas nao da maneira que acredito seja mais simples e facil fazer.
Eu planejei criar um bean em um pack qualquer do meu projeto, e arrastar esse bean para a area em branco fora do frame de onde esteja a jtable que estou trabalhando.
Tenho usado netbeans 6.9.1, pois bem, depois de adcionar esse bean, clico com o botao direito em cima da jtable e vou em conteudo da tabela. na aba “colunas” seleciono a coluna das celulas que desejo que seja exibido o icone, e em seguida clico em “Renderizador” e pronto o bean que arrastei para área em branco do frame surge ali.
Apos isso ainda vou em inspector e na arvore “outros componentes” seleciono o bean, vou em propiedades e apago o nome dele no campo text, para que somente o icone seja exibido nas celulas da coluna.
A ideia inicial funciona , se nao fosse por um pequeno detalhe. A coluna que aponta para o bean ( nao opacao Redenrizador ) lista valores 1 e 2 somente
valores 1, deveria exibir o icone tal e valores 2, outro icone, para isso fiz uma cadeia de if testando o valor da celula da coluna que exibi-los, os ifs estao funcionando realizei diversos testes para saber se estao identificando os valores 1 e 2. mas somente o ultimo if é oq esta passando o icone, sendo assim, as celulas que recebem o valor 1 acabam recebendo o icone que seria destinado as celulas de valor 2.
Pq minha ideia seria util ? primeiro pq axo um modo muito pratico de exibir icones em colunas de jtable, tendo um codigo desacoplado do frame, e ser utilizado em qualquer
circunstancia; softwares comerciais, ou jtables que seja destinadas a listas , dividas pagas e nao pagas, e tanta outras combinacoes e possibilidades que o companheiros
ja devam imaginar. A baixo esta o codigo , o codigo nao é 100% de minha autoria, na verdade combinei muitos trechos, e pensei em muitas formas para faze-lo funcionar
Obrigado , pela anteção e tomara que consigamos fazer funcionar.
package br.com.bueno.engine;
import java.awt.Component;
import java.sql.SQLException;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
/**
*
* @author VARIOS AUTORES INCLUSIVE EU
* email = [email removido]
*/
public class ImageRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent (JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row, int column) {
int tamanho = table.getRowCount();
for(int i=0; i< tamanho; i++)
{
/// na coluna 0 é listado os valos 1 e 2 . Valor 1 icone tal, valor 2 outro icone.
Object teste = table.getValueAt(i, 0);
String convert = String.valueOf(teste);
// o principal problema e que ele testa a condicao do if, mas nao seta o icone da ocasiao
if (convert.equals("1"))
{
System.out.println(convert+"con"); // COLOQUEI ESTA LINHA PARA TESTAR SE ENTRA NESTE IF
this.setIcon(new ImageIcon("C:\\confirma.png"));
}
else if(convert.equals("2"))
{
System.out.println(convert+"can");
this.setIcon(new ImageIcon("C:\\button_cancel.png"));
}
}
return this;
}
}
class Model extends DefaultTableModel {
@Override
public boolean isCellEditable (int row, int column) {
return false;
}
// COMENTEI ESSAS LINHAS PQ ACUSAVA UM ERRO NO NETBEANS E ESTA PARTE DO CODIGO ORIGINAL ERA DESTINADO A OUTRA COISA
// @Override
// public Object getValueAt (int row, int column) {
// return list[row];
// }
//
// @Override
// public int getRowCount () {
// return list.length;
// }
@Override
public int getColumnCount () {
return 2;
}
@Override
public String getColumnName (int column) {
return column == 0? "Name" : "Preview";
}
@Override
public Class<?> getColumnClass (int columnIndex) {
return String.class;
}
}