【问题标题】:Remove Renderer from a JTable从 JTable 中删除渲染器
【发布时间】:2012-01-02 22:30:45
【问题描述】:

我有一个带有自己编写的渲染器的 JTable。当我将 JTable 设置为禁用时,我希望它被涂成灰色,并且使用当前的渲染器是不可能的。这就是为什么我想在禁用 JTable 时删除渲染器,然后在启用时再次设置它。

这可能吗,或者我可以采取不同的解决方案吗?

【问题讨论】:

    标签: java swing jtable render


    【解决方案1】:

    您可以在返回渲染器组件时检查表格是否启用。然后,您可以在渲染器中设置一个状态变量,该变量在禁用时与启用时渲染单元格的方式不同。这种方法还可以允许其他状态 - 我有一个渲染器,它允许根据特定列中的值使用不同的“配置文件”。

    【讨论】:

      【解决方案2】:

      使用 JXTable(来自 SwingX project) - 它的渲染器自动尊重表格启用

      编辑

      再次阅读:

      我有一个带有自己编写的渲染器的 JTable。当我设置 JTable 已禁用,我希望将其涂成灰色,并使用当前 不可能的渲染器

      为什么不可能?在您的自定义渲染器中,只需查询表启用并相应地配置其状态

       public Component getTableCellRendererComponent(...) {
           ...
           myRenderingComponent.setEnabled(table.isEnabled());
           return myRenderingComponent;
      } 
      

      【讨论】:

        【解决方案3】:

        在设置自定义渲染器之前,请从 JTable 中获取默认渲染器。将其存储在参考中以备后用。现在将您的自定义渲染器设置为 JTable。

        在禁用表格之前,设置默认的,启用时设置自定义的。

        我希望这对你有用。

        【讨论】:

        • 正如我在评论中已经提到的另一个错误(与 DefaultTableCellRenderer 相关的部分),默认实现不尊重表的启用状态
        【解决方案4】:

        您可以设置一个新的 DefaultTableRenderer()。在您的渲染器中也应该可以。或者,您可以扩展 DefaultTableRenderer。

        【讨论】:

        • 当然可以。我自己应该想到的。抱歉,今天是星期一... :)
        • 请准确地说:类名是“DefaultTableCellRenderer”。无论如何,这无济于事 - 默认实现不尊重表的启用状态
        猜你喜欢
        • 1970-01-01
        • 2011-10-02
        • 2017-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-23
        • 1970-01-01
        相关资源
        最近更新 更多