public void populateAllTableColumns(TableColumnModel columnModel) {
   for (int i = 0; i < v.size(); i++) {
     Object obj = v.elementAt(i);
     if (obj instanceof ColumnGroup) {
       ColumnGroup cg = (ColumnGroup) obj;
       cg.populateAllTableColumns(columnModel);
     }
   }
   if (columnIndex == null) {
     return;
   }
   for (int i = 0; i < columnIndex.length; i++) {
     int colIndex = columnIndex[i];
     v.add(columnModel.getColumn(colIndex));
   }
 }
 /**
  * Sets the margin that ColumnGroup instance will use and all held TableColumns and/or
  * ColumnGroups.
  *
  * @param margin the margin
  */
 public void setColumnMargin(int margin) {
   this.margin = margin;
   Iterator iter = v.iterator();
   while (iter.hasNext()) {
     Object obj = iter.next();
     if (obj instanceof ColumnGroup) {
       ((ColumnGroup) obj).setColumnMargin(margin);
     }
   }
 }
  GroupableHeaderExample() {
    super("Groupable Header Example");

    DefaultTableModel dm = new DefaultTableModel();
    dm.setDataVector(
        new Object[][] {
          {"119", "foo", "bar", "ja", "ko", "zh"},
          {"911", "bar", "foo", "en", "fr", "pt"}
        },
        new Object[] {"SNo.", "1", "2", "Native", "2", "3"});

    JTable table =
        new JTable(dm) {
          protected JTableHeader createDefaultTableHeader() {
            return new GroupableTableHeader(columnModel);
          }
        };

    TableColumnModel cm = table.getColumnModel();
    ColumnGroup g_name = new ColumnGroup("Name");
    g_name.add(cm.getColumn(1));
    g_name.add(cm.getColumn(2));
    ColumnGroup g_lang = new ColumnGroup("Language");
    g_lang.add(cm.getColumn(3));
    ColumnGroup g_other = new ColumnGroup("Others");
    g_other.add(cm.getColumn(4));
    g_other.add(cm.getColumn(5));
    g_lang.add(g_other);

    GroupableTableHeader header = (GroupableTableHeader) table.getTableHeader();
    header.addColumnGroup(g_name);
    header.addColumnGroup(g_lang);
    JScrollPane scroll = new JScrollPane(table);
    getContentPane().add(scroll);
    setSize(400, 120);
  }