首页 > 解决方案 > 使用自定义 JTableCellRenderes

问题描述

我有一个 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));
        }
    }

当我添加第一行时,它会得到正确的颜色。但是当我添加第二行时,第一种和第二种颜色的单元格都填充了第二种颜色。我怎样才能得到确切的行。实际上我想要的是在添加一行的同时用不同的颜色填充每一行的最后一个单元格。

标签: javaswingjtabletablecellrenderer

解决方案


您需要查看概念:编辑器和渲染器以及使用自定义渲染器,因为您显然不了解渲染器在 Swing 中的工作原理。

您永远不要向JTable's添加组件TableModel,这不是它的责任。

您将JTables配置TableColumn为使用特定的渲染,例如...

table.getColumnModel().getColumn(6).setCellRenderer(new CustomRenderer);

假设您想要特定列的特定渲染器并且没有为某种类型的对象配置它


推荐阅读