我创建了一个自定义单元格渲染器,以用特定颜色填充单元格。
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。但这不起作用。
答案 0 :(得分:0)
但是当我删除行时,它不会删除填充的颜色单元格。
因为您将要绘制的单元格存储在“ cellColors” Map
中。
从表格中删除一行时,您还需要从地图中删除该点。
您可以将TableModelListener
添加到TableModel。删除行后,系统会通知您,然后您也可以从地图上删除该点。