删除添加的自定义单元格渲染器

时间:2018-07-18 08:04:06

标签: java swing jtable tablecellrenderer

我创建了一个自定义单元格渲染器,以用特定颜色填充单元格。

public class ColorInCellRenderer extends DefaultTableCellRenderer

    {
        private final Map<Point, Color> cellColors = new HashMap<Point, Color>();
        public void setCellColor(int row, int column, Color color)
        {
            if (color == null)
            {
                cellColors.remove(new Point(row, column));
            }
            else
            {
                cellColors.put(new Point(row, column), color);
            }
        }

        private Color getCellColor(int row, int column)
        {
            Color color = cellColors.get(new Point(row, column));
            return color;
        }

        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
        {
            Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            Color color = getCellColor(row, column);
            c.setBackground(color);
            return c;
        }
    }

我将它用于向jTable中添加一行,如下所示。

private void addTableRow(String type, String name, String rank, String notes, String location, Color color)
    {
        tableModel.addRow(new Object[]
        {
            type,
            name,
            rank,
            notes,
            location
        });
        colorInCellRenderer.setCellColor(tableModel.getRowCount() - 1, INDEX_OF_THE_COLOR_COLUMN, color);
        JTable.repaint();
    }

它可以正常工作并正确填充单元格。但是,当我删除该行时,它不会删除填充的颜色单元。取而代之的是,颜色列将替换为下一行中的颜色单元。我尝试删除行后重新绘制jTable。但这不起作用。

1 个答案:

答案 0 :(得分:0)

  

但是当我删除行时,它不会删除填充的颜色单元格。

因为您将要绘制的单元格存储在“ cellColors” Map中。

从表格中删除一行时,您还需要从地图中删除该点。

您可以将TableModelListener添加到TableModel。删除行后,系统会通知您,然后您也可以从地图上删除该点。