更改JTable单元格背景颜色

时间:2011-06-28 18:03:32

标签: java swing jtable render background-color

好的,这是我上一个问题的后续行动: JTable: Changing cell background when a button is clicked 我现在可以使用isSelected参数更改JTable中所选单元格的背景颜色,但我无法弄清楚每次渲染时单元格渲染器设置某些单元格背景的逻辑。

基本上我想选择几个单元格,单击一个按钮,更改所选单元格的背景颜色,并在取消选择单元格后保持该颜色(不影响未选中的单元格)。

这看起来像是一个简单的问题,但我对如何做到这一点感到非常难过。

与往常一样,任何意见都表示赞赏。

2 个答案:

答案 0 :(得分:4)

您需要存储有关选择了哪些单元格以及所需背景的信息。然后,您的CellRenderer在决定用于背景的颜色时需要参考该信息。

渲染器的基本逻辑:

  • 如果选择使用选定的颜色
  • 如果单元格被标记为保持背景颜色
  • 在所有其他情况下,请使用正常背景颜色

答案 1 :(得分:2)

您必须将包含颜色的复杂对象作为单元格值传递。

按下按钮应更新所选对象的对象颜色(对于您选择的单元格)。您的渲染器必须使用此值的颜色来填充背景。

更改对象的颜色后,调用table.cellChanged()(不记得方法的名称)来触发重新绘制。

class CellValue {
 public Color color;
 public String text; 
}

...
//renderer
getCellRendererComponent(...) {
  JLabel l = super.getCellRendererComponent(...);
  CellValue v = (CellValue) value;
  l.setBackgroundColor(v.color);
}

像这样的东西