Imagem e Cor em linha da JTable

1. Imagem e Cor em linha da JTable

Carlos Bruno
cbcarlos7

(usa Linux Mint)

Enviado em 24/04/2015 - 13:20h

Tenho uma tabela que usa cores intercaladas nas linhas
A classe que usa ela é:


public class CoresJTable implements TableCellRenderer{

public static final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();
int line;
String valor;



//@Override

@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
Component renderer = DEFAULT_RENDERER.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column);
((JLabel) renderer).setOpaque(true);
Color foreground = null, background = null;


valor = String.valueOf(value);
if (isSelected) {
foreground = new Color(0, 0, 0);
background = new Color(184, 207, 229);

}
else if(row % 2 == 0){
foreground = new Color(0, 0, 0);
background = new Color(213, 230, 239);
}




switch(valor) {
case "PAR":
foreground = new Color(251, 173, 48);
background = new Color(213, 230, 239);
break;
case "IMPAR":
foreground = new Color(250, 0, 0);
background = new Color(184, 207, 229);
break;


}



renderer.setForeground(foreground);
renderer.setBackground(background);
return renderer;
}
}



Ela funciona legal!
Eu chamo na classe principal
TableCellRenderer renderer = new CoresJTable(); 

...
para colorir eu faço assim:

private void corCelula(){

for (int c = 0; c < tabela.getColumnCount(); c++) {
tabela.setDefaultRenderer(tabela.getColumnClass(c), renderer);
}


}


Mas preciso colocar figuras em algumas linhas da tabela
A classe que faço isso é :



class FiguraColumn extends JLabel implements TableCellRenderer{
@Override
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column){

Color foreground = null, background = null;

String text = String.valueOf(value);
String img;

Component renderer = DEFAULT_RENDERER.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column);


if (isSelected) {
foreground = new Color(0, 0, 0);
background = new Color(184, 207, 229);

}
else if(row % 2 == 0){
foreground = new Color(0, 0, 0);
setBackground(new Color(184, 231, 177));
}


switch (text) {
case "src/image/verde.gif":
img = "src/image/verde.gif"; // cria a imagem


break;
case "src/image/amarela.gif":
img = "src/image/amarela.gif"; // cria a imagem


break;
case "src/image/vermelha.gif":
img = "src/image/vermelha.gif"; // cria a imagem


break;
default:
img = "src/image/alta.png"; // cria a imagem


break;
}


carregarImg(img);
renderer.setForeground(foreground);
renderer.setBackground(background);
setHorizontalAlignment(CENTER);
setBackground(new Color(184, 231, 177));
return this;
}
private void carregarImg(String img){
Image foto1 = new ImageIcon(img).getImage().getScaledInstance(15, 15, Image.SCALE_DEFAULT);
this.setIcon(new ImageIcon(foto1));
this.repaint();
}
@Override
public void validate() {}
@Override
public void revalidate() {}
@Override
protected void firePropertyChange(String propertyName,
Object oldValue, Object newValue) {}
@Override
public void firePropertyChange(String propertyName,
boolean oldValue, boolean newValue) {}
}



Porém quando as figuras são setadas algumas colunas onde ficam as figuras ficam sem cores
Tipo anula parte da classe chamada anterior

A tabela fica intercalando as cores tipo até na coluna 3 e as colunas cinco e seis
não ficam com cores porque tem figuras

Tem como eu fazer a linhas onde tem as figuras ficar com as mesmas cores que o resto da tabela?

Agradeço


  






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts