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