1 package org.wcb.gui.renderer.jtable; 2 3 /** 4 * <small> 5 * <p/> 6 * Permission is granted to copy, distribute and/or modify this document 7 * under the terms of the GNU Free Documentation License, Version 1.2 8 * or any later version published by the Free Software Foundation; 9 * with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 10 * Texts. A copy of the license is included in the section entitled "GNU 11 * Free Documentation License". 12 * <p/> 13 * $File: $ <br> 14 * $Change: $ submitted by $Author: wbogaardt $ at $DateTime: Sep 7, 2006 1:46:36 PM $ <br> 15 * </small> 16 */ 17 18 import java.util.ArrayList; 19 import java.util.Iterator; 20 import java.util.Vector; 21 import javax.swing.table.DefaultTableColumnModel; 22 import javax.swing.table.TableColumn; 23 24 // Steve Webb 16/09/04 swebb99_uk@hotmail.com 25 26 /** 27 * http://www.swebb99.f2s.com/GroupableHeader/ 28 * Class which extends the functionality of DefaultColumnTableModel to 29 * also provide capabilities to group columns. This can be used for 30 * instance to aid in the layout of groupable table headers. 31 */ 32 33 public class GroupableTableColumnModel extends DefaultTableColumnModel { 34 35 /** 36 * Hold the list of ColumnGroups which define what group each normal 37 * column is within, if any. 38 */ 39 protected ArrayList columnGroups = new ArrayList(); 40 41 42 /** 43 * Add a new columngroup. 44 * @param columnGroup new ColumnGroup 45 */ 46 public void addColumnGroup(ColumnGroup columnGroup) { 47 columnGroups.add(columnGroup); 48 } 49 50 /** 51 * Provides an Iterator to iterate over the 52 * ColumnGroup list. 53 * @return Iterator over ColumnGroups 54 */ 55 public Iterator columnGroupIterator() { 56 return columnGroups.iterator(); 57 } 58 59 /** 60 * Returns a ColumnGroup specified by an index. 61 * @param index index of ColumnGroup 62 * @return ColumnGroup 63 */ 64 public ColumnGroup getColumnGroup(int index) { 65 if(index >= 0 && index < columnGroups.size()) { 66 return (ColumnGroup)columnGroups.get(index); 67 } 68 return null; 69 } 70 71 /** 72 * Provides and iterator for accessing the ColumnGroups 73 * associated with a column. 74 * @param col Column 75 * @return ColumnGroup iterator 76 */ 77 public Iterator getColumnGroups(TableColumn col) { 78 if (columnGroups.isEmpty()) return null; 79 Iterator iter = columnGroups.iterator(); 80 while (iter.hasNext()) { 81 ColumnGroup cGroup = (ColumnGroup)iter.next(); 82 Vector v_ret = (Vector)cGroup.getColumnGroups(col,new Vector()); 83 if (v_ret != null) { 84 return v_ret.iterator(); 85 } 86 } 87 return null; 88 } 89 } 90