DefaultTableCellRenderer 不工作

DefaultTableCellRenderer not working

我正在尝试更改 JTable 第三行单元格的颜色(如果它们有值)。我读到一个很好的方法是使用 table 单元格渲染器。然而,它似乎什么也没做!这是我的 RENDERER 代码:

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 的图片(我不认为模型代码有任何用处,因为它有点长):

我认为它与 if 条款 没有任何关系,正如我评论的那样,它也不起作用。

我哪里错了?

使用

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

而不是

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

setDefaultRenderer 中的代码按预期运行:

final YourCellRenderer cellRenderer = new YourCellRenderer();
YourTableModel stModel = new YourTableModel();
table = new JTable(stModel);

table.setDefaultRenderer(YourComponent.class, cellRenderer);

它似乎没有渲染的原因是当您将 YourComponent.class 映射到渲染器时,它没有触发,因为 YourTableModel 认为 class 是一个Object.

要更正此问题,您需要覆盖 YourTableModel class:

中的 getColumnClass 方法
public class YourTableModel extends AbstractTableModel {

    ...

    @Override
    public Class<?> getColumnClass(int columnIndex) {
        return YourComponent.class;
    }
    ...
}