【问题标题】:java : when is this method called : getTableCellRendererComponent?java:这个方法什么时候调用:getTableCellRendererComponent?
【发布时间】:2011-09-19 11:08:41
【问题描述】:

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

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

就在第一次绘制JTable 时?

如果我在 jframe 上有一组按钮和一个 jtable,并且每个按钮在按下时都会导致表格中一定数量的单元格被着色,我怎样才能导致这个方法 "getTableCellRendererComponent" 在什么时候被调用我按下按钮?

【问题讨论】:

    标签: java swing jtable


    【解决方案1】:

    何时调用此方法: getTableCellRendererComponent ?

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

    在 JTable 的单元格中设置颜色

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

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

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

    参考:Simple example to demonstrate usage of TableCellRenderer

    【讨论】:

    • DefaultTableModel 与渲染无关,只是指定数据的类,以便表格可以使用适当的渲染器。每个单元格都没有默认渲染器。您不能在 TableModel 中指定单元格颜色。
    • -1 表示完全错误的第一句话(回答“何时”),另一个 -1 表示错误地使模型发挥作用(正如 Rob 已经提到的),一个 -1/2 表示绑定配置渲染器的特定实现(任何组件都可以)。建议你先学习进入学习轮;-)
    • @Camickr - 很抱歉,我错误地提到了 DefaultTableModel 而不是 DefaultTableColumnModel。我已经编辑了我的帖子以更正这些。 @kleopatra-
    • @kleopatra - 感谢您的反馈。我想“何时”问题的第一个答案是正确的。为了从技术上解释,我们可以说 BasicTableUIpaintCell 方法调用 JTableprepareRenderer 反过来又调用 getTableCellRendererComponent。所以实际上当我们第一次查看单元格时,paintCell 会被调用。有错请指正。
    • 仍然是错误的 - first 绘画轮没有什么特别之处。此外,它可能会被其他客户和其他需求(例如在测量尺寸要求时)否决
    【解决方案2】:

    如果您想忘记何时/如何/在哪里更新 TableCell(s),请查找 prepareRenderer 最佳示例,正如我所见 camickr blog

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-05-16
        • 2018-01-01
        • 2012-02-02
        • 2015-10-14
        • 2011-07-21
        • 1970-01-01
        • 2015-07-13
        相关资源
        最近更新 更多