【问题标题】:Change JTable cell background colors更改 JTable 单元格背景颜色
【发布时间】:2011-09-24 13:24:41
【问题描述】:

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

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

这似乎是一个简单的问题,但我完全不知道如何做到这一点。

一如既往,欢迎任何意见。

【问题讨论】:

  • 这是一个相关的example
  • 看起来你的两个线程只讨论prepareRenderer,因为与(convertRowIndexToModel(int row))RowFilter,RowSorter,AddRow(s),RemoveRow(s)一起使用,只是小心地删除TableColumn(s ) 来自 TableView (ArrayIndexException) ...

标签: java swing jtable render background-color


【解决方案1】:

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

渲染器的基本逻辑:

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

【讨论】:

  • 优秀。在其他情况下,我没有保持背景,所以所有的单元格都呈现出那种颜色。谢谢。
【解决方案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);
}

类似的东西

【讨论】:

    猜你喜欢
    • 2015-11-29
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 2013-04-12
    • 2021-10-31
    • 1970-01-01
    相关资源
    最近更新 更多