使用自定义 JTableCellRenderes

Use custom JTableCellRenderes

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

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

这就是我在添加 table 行时使用的方法。

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

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

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

您永远不要向 JTableTableModel 添加组件,那不是它的责任。

您将 JTableTableColumn 配置为使用特定渲染,例如...

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

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