使用 TableCellRender 设置 JTable 列和行的颜色
Posted
技术标签:
【中文标题】使用 TableCellRender 设置 JTable 列和行的颜色【英文标题】:Set color of a JTable column and row with TableCellRender 【发布时间】:2011-10-14 17:07:00 【问题描述】:我想知道是否可以在不定义自己的自定义 TableCellRender 的情况下设置指定的行和列颜色。
目前我正在使用此代码
TableCellRenderer cellRenderer = this.devicePropertyTable.getCellRenderer(1, 1);
Component cellRenderComponent = cellRenderer.getTableCellRendererComponent(this.devicePropertyTable, "", false, false, 1, 1);
if (propertyValue.equalsIgnoreCase("true"))
cellRenderComponent.setBackground(Color.green);
else
cellRenderComponent.setBackground(Color.red);
我假设这将获得表节点 1,1 的单元格渲染器并使用相应的颜色对其进行着色。但发生的情况是它会为整个表格着色。
是否有其他方法可以在不创建自定义 TableCellRender 的情况下执行此操作?
【问题讨论】:
自定义渲染器是 the 小硬币,专为......好吧......在集合组件中自定义视觉效果 :-) 如果您需要比核心 Swingx 更强大和更可插入的支持,你可能想看看 SwingX 【参考方案1】:编辑:对于这个用例,最好使用上面答案中提到的 prepareRenderer。
您必须扩展 JTable 并覆盖
<!-- language: lang-java -->
getCellRenderer(int row, int column)
public class MyTable extends JTable
@Override
public TableCellRenderer getCellRenderer(int row, int column)
return new TableCellRenderer()
Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column)
Component cellRenderComponent = this.MyTable.super.getCellRenderer(row, column);
if (getModel().getValue(row,column).toString().equalsIgnoreCase("true"))
cellRenderComponent.setBackground(Color.green);
else
cellRenderComponent.setBackground(Color.red);
【讨论】:
-1 因为它完全是错误的(你肯定不想短路表的查找以找到合适的渲染器)【参考方案2】:我想知道是否可以在不定义自己的自定义 TableCellRender 的情况下设置指定的行和列颜色。
重写 JTable 的 prepareRenderer(...) 方法。
请参阅 Table Row Rendering 了解一些示例,帮助您入门。
【讨论】:
以上是关于使用 TableCellRender 设置 JTable 列和行的颜色的主要内容,如果未能解决你的问题,请参考以下文章