Java Swing - 如何在JTable中创建多个列头?

12

JTable 中有没有办法创建多个列标题?我的意思是,通常只有一行,但我需要两行具有相同格式(类似于标题),并且组合其中一个标题的某些单元格。

我需要像这样的内容:

Header0 |          Header123          | Header4
Header0 | Header1 | Header2 | Header3 | Header4

有什么方法吗?

3个回答

6

Nick Meyer先生,感谢您的回复。不过,您地址中的内容有些过时。我使用JRE 1.7运行它时,它并没有像预期那样工作。但是可以进行修改以使其正常工作。下面是我所做的更改:

/*
* add these code in GroupableTableHeader
*/

  public void updateUI(){
//      setUI(this.getUI());

      TableCellRenderer renderer = getDefaultRenderer();
      if (renderer instanceof Component) {
          SwingUtilities.updateComponentTreeUI((Component)renderer);
      }
  }

/*
* add these code in GroupableTableHeaderUI in 2 places, you must know where
*/
      if (renderer == null) {
          renderer = header.getDefaultRenderer();
      }

/*
* change the getSize method in ColumnGroup 
*/

  public Dimension getSize(JTable table) {
    Component comp = renderer.getTableCellRendererComponent(
        table, getHeaderValue(), false, false,-1, -1);
    int height = comp.getPreferredSize().height; 
    int width  = 0;
    Enumeration en = v.elements();
    while (en.hasMoreElements()) {
      Object obj = en.nextElement();
      if (obj instanceof TableColumn) {
        TableColumn aColumn = (TableColumn)obj;
        width += aColumn.getWidth();
//        width += margin;
      } else {
        width += ((ColumnGroup)obj).getSize(table).width;
      }
    }
    return new Dimension(width, height);
  }

最终结果如下。 这里输入图片描述


5

我以前用过这个,真的很喜欢。运行得非常好。 - Jamie McIlroy
链接似乎已失效。 - Matthias Braun
@MatthiasBraun,是的,这是一个老问题。你试过在网上搜索吗?我用了“可分组标题”,这是出现的第一个链接:http://www.java2s.com/Code/Java/Swing-Components/GroupableGroupHeaderExample.htm - camickr

1

您可以扩展BasicTableHeaderUI并编写自己的绘制方法实现,在其中可以绘制任何类型的表头。 完成后,使用以下命令将默认表头UI更改为:table.getTableHeader().setUI(MyTableHeaderUI)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接