java:这个方法什么时候调用:getTableCellRendererComponent?

时间:2011-06-21 11:47:02

标签: java swing jtable

为了设置特定表格单元格的颜色,我应该创建一个自定义TableCellRenderer,它具有以下方法:getTableCellRendererComponent

此方法何时调用:getTableCellRendererComponent

第一次绘制JTable时?

如果我在jframe上有一组按钮和一个jtable,按下每个按钮会导致表中一定数量的单元格被着色,我该如何使这个方法"getTableCellRendererComponent"成为当我按下按钮时调用?

3 个答案:

答案 0 :(得分:2)

首次呈现表时会触发此类,但在调用fireTableCellUpdated或任何其他“fire *”方法时,应在所有单元格上调用此方法。我的印象是你正在使用一个扩展AbstractTableModel(DefaultTableModel?)的类,此时你应该在更新表模型的特定值时触发这些方法。

可以在Example Depot找到使用自定义单元格渲染器的示例。当引入单元格以及发生模型更新时,将调用getTableCellRendererComponent。

附录:我刚刚注意到你问题的另一部分,何时调用了getTableCellRendererComponent?这是为必须呈现的表中的每个可见单元格调用的。可以这样想,如果您在内部使用JLabel作为渲染器,您将返回JLabel配置为仅显示该单元格。它将在下一个单元格上重复使用以进行渲染。想到它的最简单方法是您希望单元格看起来像的可视化模板,在getTableCellRendererComponent调用上配置它,然后返回它。调用框架将其作为“图像”(由于缺少更好的术语)呈现给屏幕缓冲区,然后重新配置为下一个单元格并再次渲染。

答案 1 :(得分:2)

如果您想忘记更新TableCell的时间/方式/位置,那么请查看prepareRenderer最佳示例,因为我看到camickr blog

编辑:为了更好/更有价值的肝脏,请编辑您的帖子并添加您的代码

答案 2 :(得分:0)

  

此方法何时调用:   getTableCellRendererComponent?

当第一次为您的视图显示/呈现UI组件时,将调用此方法。

  

设置JTable单元格中的颜色

  1. 希望您使用自定义DefaultTableCellRenderer。如果是这样,那么您可以在自定义CellRenderer中全局化JLabel,然后根据行,列索引在按钮单击时设置其背景颜色。

  2. 否则,您可以使用您有defaultrenderer / set customrenderer的DefaultTableColumnModel,它将针对每个单元格进行渲染。使用它可以设置单元格的背景颜色。

  3. TableColumn col = table.getColumnModel().getColumn(vColIndex);
    col.setCellRenderer(new MyTableCellRenderer());
    

    参考:Simple example to demonstrate usage of TableCellRenderer