2017-02-26 64 views
0

我想改變我的JTable的第三行的單元格的顏色,如果他們有一個值。我讀過這樣做的好方法是使用表格單元格渲染器。但是,它似乎沒有做任何事情!在這裏有我的渲染代碼:DefaultTableCellRenderer不起作用

public class RenderTablaPrestamos extends DefaultTableCellRenderer{ 

    @Override 
    public Component getTableCellRendererComponent (JTable tabla, Object valor, 
               boolean isSelected, boolean hasFocus, 
               int row, int col){ 
    JLabel celda = (JLabel) super.getTableCellRendererComponent(tabla, valor, isSelected, hasFocus, row, col); 

     if(valor instanceof Integer){ 
      Integer v=(Integer)valor; 
      if(col==3){ 
       if(valor!=null){ 
        celda.setBackground(Color.red); 
       } 
       else{ 
        celda.setBackground(Color.WHITE); 
       } 
      } 
      else{ 
       celda.setBackground(Color.WHITE); 
      } 
     } 
    return celda; 
    } 
} 

在這裏有我如何用我的渲染器:

tablaUsuariosPrestamos.setDefaultRenderer(Object.class,new RenderTablaPrestamos()); 

在這裏有我的JTable的照片(我不認爲模型代碼將是任何有用的因爲它是有點長):

enter image description here

我不認爲它做任何事情做的如果clausules,一我評論他們,也沒有效果。

我哪裏錯了?

+0

你設置Object類的渲染器。您的模型似乎表明第三個olumn的類是Integer(因爲它們已經以特定方式呈現)。舉辦一個完整的最小程序再現問題。無需發佈您的真實模型。此外,您至少可以簡單地通過使用調試器並設置斷點來檢查您的渲染器是否被調用。你爲什麼不那樣做? –

+0

爲了更好地提供幫助,請發佈[MCVE]或[簡短,獨立,正確的示例](http://www.sscce.org/)。順便說一句 - 標籤需要是不透明的才能顯示BG顏色。 –

回答

1

使用

for (int i = 0; i < tabla.getColumnCount(); i++) { 
    tabla.getColumnModel().getColumn(i).setCellRenderer(new RenderTablaPrestamos()); 
} 

代替

tablaUsuariosPrestamos.setDefaultRenderer(Object.class,new RenderTablaPrestamos());