DefaultTableCellRenderer无法正常工作

时间:2017-02-26 16:35:25

标签: java swing jtable jlabel cellrenderer

我正在尝试更改JTable第三行单元格的颜色(如果它们有值)。我读到一个很好的方法是使用表格单元格渲染器。但是,它似乎没有做任何事情!这里有我的RENDERER代码:

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

这里有我如何使用我的渲染器:

<h1 class="title">
    <?php
        if (null === ($this->params->get('page_heading')))
        {
            $mydoc = JFactory::getDocument();
            $mytitle = $mydoc->getTitle();
            echo $mytitle;
        }
        else 
        {
            $active = JFactory::getApplication()->getMenu()->getActive();
            echo $active->params->get('page_heading');
        }
    ?>
</h1>

这里有我的JTable图片(我不认为模型代码会有用,因为它有点长):

enter image description here

我不认为它与 if clausules 有什么关系,因为我对它们进行了评论并且它也没有用。

我哪里错了?

2 个答案:

答案 0 :(得分:1)

使用

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

而不是

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

答案 1 :(得分:0)

setDefaultRenderer 中的代码按预期运行:

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

table.setDefaultRenderer(YourComponent.class, cellRenderer);

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

要更正此问题,您需要覆盖 getColumnClass 类中的 YourTableModel 方法:

public class YourTableModel extends AbstractTableModel {

    ...

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