JTable标题和间隔行

时间:2011-08-16 20:07:01

标签: java swing jtable jtableheader

我是Swing的新手,今天一直在努力使用JTable组件。因为我试图制作一个有点花哨的表格,所以我无法在任何地方找到我想要的特定答案。

我想在表格的顶部有一个“组”标题。这意味着跨越整个表的3或4行,并“分组”各个列,基本上将它们分区。

示例(原谅眼睛疲劳):

////////////////////////////////ANIMALS//////////////////////////
/////////Mammals///////////////////////Rodents///////////////////
////People/////Dogs//////////Rats/////Rodents of Unusual Size////

斜杠(“/”)表示空格。标题为“ANIMALS”的第一个标题指的是表中的所有列。第二个标题向下分区ANIMALS,依此类推。在第三个也是最后一个标题之后,我们到达了实际的表格,其中每一行将有4列,每列对应一种动物。

显然这是一个例子,可能是一个坏的例子,但这就是我所说的“分区标题”。

我的问题: 我没有看到JTableHeader和TableColumnModel如何支持这个功能。如果他们这样做,有人可以朝着正确的方向推动我。如果他们不这样做,这肯定不是Swing应用程序第一次需要这样的东西。任何人都知道的第三方组件?

另外,我希望能够在我的桌子上撒上“Spacer”或Spanning Rows,代表一组行。这些间隔符将存在于表内(不像标题一样位于其顶部),但会跨越每一列并具有单个标签,表示后续行所表示的组的名称。再一次,我没有看到Swing支持这个,任何想法?

谢谢,我为真正糟糕的例子/绘画道歉。

4 个答案:

答案 0 :(得分:2)

您可以调整这个令人尊敬的Multiple Row Header示例。

答案 1 :(得分:1)

默认情况下,JTable中只有一行标头(并且它不是JTable的一行,而是JTableHeader)。无论如何,你可以实现一个TableCellRenderer,它以一种似乎是标题的方式显示前n个非标题行。

以下步骤更多:

  1. 实现TableCellRenderer以显示标题JTable的所需行的单元格,如标题的单元格
  2. 喜欢:

    public Component getTableCellRendererComponent(JTable table, Object value,
        boolean isSelected, boolean hasFocus, int row, int column){   
    
        this.setOpaque(true);
        TableCellRenderer renderer = table.getTableHeader().getDefaultRenderer();
        return renderer.getTableCellRendererComponent(table, value, isSelected,
              hasFocus, row, column);
    }
    
    1. 扩展JTable并实现以下方法以返回所需的单元格渲染器:

      public TableCellRenderer getCellRenderer(int row, int column){}
      
    2. 无论如何,根据您的要求,还有另一个问题需要解决:JTable具有固定数量的列,因此您必须找到一种解决方法来实现该结果。

答案 2 :(得分:1)

核心Swing不支持

单元格(行/列)分组或拆分,既不是标题也不是表本身。设计的JTable 是通用网格。试图将一些类似网格的行为和视觉效果调整到它的设计中。可以做到,但要实现并非易事。 @Trashgod指出了其中一些战斗(它们仍然有效吗?它们看起来像老式的第一代Tame示例?)。 JIDE是支持它的商业产品(免责声明:从未在生产中使用过它:-)

答案 3 :(得分:0)