【发布时间】:2012-01-02 22:30:45
【问题描述】:
我有一个带有自己编写的渲染器的 JTable。当我将 JTable 设置为禁用时,我希望它被涂成灰色,并且使用当前的渲染器是不可能的。这就是为什么我想在禁用 JTable 时删除渲染器,然后在启用时再次设置它。
这可能吗,或者我可以采取不同的解决方案吗?
【问题讨论】:
我有一个带有自己编写的渲染器的 JTable。当我将 JTable 设置为禁用时,我希望它被涂成灰色,并且使用当前的渲染器是不可能的。这就是为什么我想在禁用 JTable 时删除渲染器,然后在启用时再次设置它。
这可能吗,或者我可以采取不同的解决方案吗?
【问题讨论】:
您可以在返回渲染器组件时检查表格是否启用。然后,您可以在渲染器中设置一个状态变量,该变量在禁用时与启用时渲染单元格的方式不同。这种方法还可以允许其他状态 - 我有一个渲染器,它允许根据特定列中的值使用不同的“配置文件”。
【讨论】:
使用 JXTable(来自 SwingX project) - 它的渲染器自动尊重表格启用
编辑
再次阅读:
我有一个带有自己编写的渲染器的 JTable。当我设置 JTable 已禁用,我希望将其涂成灰色,并使用当前 不可能的渲染器
为什么不可能?在您的自定义渲染器中,只需查询表启用并相应地配置其状态
public Component getTableCellRendererComponent(...) {
...
myRenderingComponent.setEnabled(table.isEnabled());
return myRenderingComponent;
}
【讨论】:
在设置自定义渲染器之前,请从 JTable 中获取默认渲染器。将其存储在参考中以备后用。现在将您的自定义渲染器设置为 JTable。
在禁用表格之前,设置默认的,启用时设置自定义的。
我希望这对你有用。
【讨论】:
您可以设置一个新的 DefaultTableRenderer()。在您的渲染器中也应该可以。或者,您可以扩展 DefaultTableRenderer。
【讨论】: