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

Java Jtable,以不同的颜色绘制每个单元格,而无需为每个单元格创建不同的渲染器,java,swing,jtable,renderer,cellrenderer,Java,Swing,Jtable,Renderer,Cellrenderer,我正在制作一个类似于客房经理的程序 每天每个房间都有不同的客户,有时一个客户可以在同一天入住几个房间 我想给每个客户都涂上自己的颜色。 我可以在不为每个客户端创建唯一的单元渲染器的情况下执行此操作 我不熟悉J-Tables,整个渲染系统在我看来效率不高 这是我的应用程序的屏幕截图 我正在为平日和周末的列标题使用不同的渲染器。 此外,单元格是J按钮,渲染器对其进行着色,但颜色相同 灰色单元格是“新的”,橙色单元格被客户端、不同客户端、相同颜色占据:( 有什么想法吗 谢谢 戴夫 创建一个单单元格渲

我正在制作一个类似于客房经理的程序

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

我想给每个客户都涂上自己的颜色。 我可以在不为每个客户端创建唯一的单元渲染器的情况下执行此操作

我不熟悉J-Tables,整个渲染系统在我看来效率不高

这是我的应用程序的屏幕截图

我正在为平日和周末的列标题使用不同的渲染器。 此外,单元格是J按钮,渲染器对其进行着色,但颜色相同

灰色单元格是“新的”,橙色单元格被客户端、不同客户端、相同颜色占据:(

有什么想法吗

谢谢

戴夫

  • 创建一个单单元格渲染器类
  • 使用单元格的状态确定其颜色
  • 如果列为0,则将其设置为salmon
  • 否则,若列为非0且值表明它已被占用,则将其设置为黄色
  • 否则是灰色的
  • 关键:这完全取决于
    gettableCellRenderComponent(…)
    方法内部的逻辑,以及是否正确使用传递到此方法中的参数
      • 创建一个单单元格渲染器类
      • 使用单元格的状态确定其颜色
      • 如果列为0,则将其设置为salmon
      • 否则,若列为非0且值表明它已被占用,则将其设置为黄色
      • 否则是灰色的
      • 关键:这完全取决于
        gettableCellRenderComponent(…)
        方法内部的逻辑,以及是否正确使用传递到此方法中的参数
      参见示例3(“渲染红色或绿色”):

      底线是,您的渲染器可以使用单个共享JLabel,根据单元格的不同将其设置为不同的颜色(在上面的示例中,他们扩展了DefaultTableCellRenderer,它扩展了JLabel,因此有效地将相同的JLabel用于所有单元格。如果您不喜欢继承,您可以使用自己的共享JLabel)。 这是因为JTable呈现过程使用JLabel作为“可重复使用的标记”-连续遍历单元格,“记录”单元格的外观,然后继续。如果您的表是(比如)5X3,它实际上不包含15个标签,只有15个图像。

      请参见此处的示例3(“呈现红色或绿色”):

      底线是,您的渲染器可以使用单个共享JLabel,根据单元格的不同将其设置为不同的颜色(在上面的示例中,他们扩展了DefaultTableCellRenderer,它扩展了JLabel,因此有效地将相同的JLabel用于所有单元格。如果您不喜欢继承,您可以使用自己的共享JLabel)。
      这是因为JTable呈现过程使用JLabel作为“可重复使用的标记”-连续检查单元格,“记录”单元格的外观,然后继续5X3它实际上不包含15个标签,只有15个图像。

      这就是我到目前为止所做的。我想这样做:如果列为非0,单元格被占用,请查看建议的值是什么颜色代码值,并根据它给单元格上色,例如:如果客户端占用了单元格A-将单元格颜色设置为绿色,如果客户端占用了单元格B-将单元格颜色设置为蓝色,如果客户端占用了单元格C-将单元格颜色设置为棕色,等等,这就是我到目前为止所做的。我想这样做:如果列为非0,单元格被占用,请查看建议的值是什么颜色代码值,并根据该值为单元格着色,例如:如果客户端占用了单元格A-将单元格颜色设置为绿色n、 如果客户B占用了单元格-将单元格颜色设置为蓝色,如果客户C占用了单元格-将单元格颜色设置为棕色,等等'