使用自定义JTableCellRenderes

时间:2018-07-12 09:47:37

标签: java swing jtable tablecellrenderer

我有一个包含6列的JTable。当向表中添加一行时,我需要为第一行的最后一个单元格添加黑色。第二行为红色。相应的颜色来自不同的方法。这是我的自定义表格单元格渲染器。

class CustomRenderer extends DefaultTableCellRenderer
{
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column, Color color)
    {
        JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        label.setBackground(color);
        return label;
    }
}

这是添加表格行时的使用方式。

  private void addTableRow(String type, String name, String rank, String notes, String location, Color color)
    {
        boolean isExport = isExportEnable();
        tableModel.addRow(new Object[]
        {
            type,
            name,
            rank,
            notes,
            location,
            isExport
        }
        );
        for (int i = 0; i < tableModel.getRowCount(); ++i)
        {
            JTable.getColumnModel().getColumn(6).setCellRenderer((TableCellRenderer) new CustomRenderer().getTableCellRendererComponent(null, null, false, false, i, 6, color));
        }
    }

当我添加第一排时,它会获得正确的颜色。但是,当我添加第二行时,第一颜色单元格和第二颜色单元格都用第二颜色填充。如何获得确切的行。 实际上,我想要的是在添加一行的同时以不同的颜色填充每行的最后一个单元格。

1 个答案:

答案 0 :(得分:2)

您需要看一下Concepts: Editors and RenderersUsing Custom Renderers,因为您显然不了解渲染器在Swing中的工作方式。

您永远不要在JTable的{​​{1}}上添加组件,这不是责任。

您将TableModel的{​​{1}}配置为使用特定的渲染,例如...

JTable

假设您要为特定的列使用特定的渲染器,而没有针对某种对象对其进行配置