Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DefaultTableCell渲染器不工作_Java_Swing_Jtable_Jlabel_Cellrenderer - Fatal编程技术网

Java DefaultTableCell渲染器不工作

Java DefaultTableCell渲染器不工作,java,swing,jtable,jlabel,cellrenderer,Java,Swing,Jtable,Jlabel,Cellrenderer,我试图更改JTable第三行单元格的颜色,如果它们有值的话。我读到这样做的一个好方法是使用表单元渲染器。然而,它似乎什么也没做!下面是我的渲染器代码: public class RenderTablaPrestamos extends DefaultTableCellRenderer{ @Override public Component getTableCellRendererComponent (JTable tabla, Object valor,

我试图更改JTable第三行单元格的颜色,如果它们有值的话。我读到这样做的一个好方法是使用表单元渲染器。然而,它似乎什么也没做!下面是我的渲染器代码:

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());
}

您正在为对象类设置渲染器。您的模型似乎表明第三列的类是Integer(因为它们已经以特定的方式呈现)。Pos是一个完全极小的程序复制问题。不需要张贴你的真实模型。此外,您至少可以通过使用调试器并设置断点来检查渲染器是否被调用。你为什么不这样做呢?为了更快地得到更好的帮助,发布一个or。顺便说一句,标签需要不透明才能显示背景色。
tablaUsuariosPrestamos.setDefaultRenderer(Object.class,new RenderTablaPrestamos());