我有一个包含 3 列的 JTable。 1. 图标,2. 文件或文件夹的名称,3. 文件类型或“文件夹”。我在 getTableCellRendererComponent
方法中使用 JLabel(我设置背景 + png 图像)绘制图标。最初我绘制了 JLable 的交替背景“白色”或“灰色”,因为这些是 JTable
Swing 组件交替绘制表格的颜色。现在,当我选择一行时,图标(第一列)背景不会像该行的其余部分一样重新绘制为“深蓝色”。
这是我的问题:
一般 1) 如何在突出显示行时也突出显示图标单元格(指针就足够了,不需要代码)?
具体
1.1) 我必须使用 JLabel 吗?为什么我不能.SetValueAt("image.png",0,0)
1.2) 我尝试了 getColumnClass(...)
但这似乎重绘了给定列中的所有单元格。这是预期的吗?
谢谢。
最佳答案
1.) javax.swing.table.TableCellRenderer
在被调用时获取一个 isSelected
参数。您可以通过继承 JLabel
(例如)并覆盖 getTableCellRendererComponent
轻松编写自己的 TableCellRenderer
:调整对象并返回 this
。拥有自己的渲染器还可以让您设置断点并真正了解正在发生的事情。
1.1 + 1.2.) setValueAt
和 getColumnClass
都是模型的一部分,可能无法解决所选背景的问题。
您不必使用 JLabel
:如果您查看 getTableCellRendererComponent
的返回类型,您会注意到它是 Component
(甚至不是 J组件
)。我想 JLabel
只是习惯,因为它通常具有渲染器所需的所有功能,而且 DefaultTableCellRenderer
也使用 JLabel
。为了获得最大的自由,我建议您使用 JComponent
并编写您自己的 paintComponent
,但在这种情况下您可能不必这样做。
关于java - 突出显示 JTable 中带有图标的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12233823/