Java Jtable,以不同的颜色绘制每个单元格,而不为每个单元格创建不同的渲染器

时间:2014-12-08 08:41:38

标签: java swing jtable renderer cellrenderer

我制作的程序是某种房间经理,

每个房间每天都有不同的客户,有时一个客户可以在同一天带几个房间。

我想用自己的颜色为每个客户着色。 如果不为每个客户创建一个独特的单元格渲染器,我可以这样做。

我是J-Tables的新手,整个渲染系统在我看来效率不高。

这是我的应用的屏幕截图,

我正在为工作日和周末的列标题使用不同的渲染器。 此外,单元格是J-Buttons,渲染器为它们着色,但只有相同的颜色。

灰色细胞是"新"客户,不同的客户,相同的颜色占用了橙色的那些:(

the gray cells are "New" and the orange ones are Occupied by clients, different clients, same color :(

任何想法?

感谢,

戴夫

2 个答案:

答案 0 :(得分:3)

  • 创建一个单元格渲染器类
  • 使用单元格的状态来确定其颜色。
  • 如果列为0,则将其设置为三文鱼。
  • 否则,如果列不为0且值表明它已被占用,则将其设置为黄色
  • 否则为灰色。
  • 键:这完全取决于getTableCellRendererComponent(...)方法中的逻辑,并且您使用正确传递给此方法的参数。

答案 1 :(得分:3)

在此处查看示例#3(“渲染红色或绿色”): http://www.javapractices.com/topic/TopicAction.do?Id=168

最重要的是,您的渲染器可以使用单个共享JLabel,根据单元格设置不同的颜色(在上面的示例中,它们扩展了扩展JLabel的DefaultTableCellRenderer,因此有效地将相同的JLabel用于所有单元格。如果你不喜欢继承,你可以使用自己的共享JLabel)。 它的工作原理是因为JTable渲染过程使用JLabel作为“可重复使用的标记” - 连续地遍历单元格,“记录”单元格的外观,然后继续前进。如果你的桌子是(比方说)5X3,它实际上不能容纳15个标签,只有15个图像。