知识大全 java中如何实现表格的多表头显示
Posted 表格
篇首语:在任何情况下,你都要学习——以更换学习内容作为你的休息。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 java中如何实现表格的多表头显示相关的知识,希望对你有一定的参考价值。
首先声明 这些内容都是借鉴来的 稍微改动了一下 主要就是三个应用类ColumnGroup GroupableTableHeader GroupableTableHeaderU和一个示例类GroupableHeaderExample ColumnGroup类主要负责多表头的构建 import java awt Component; import java awt Dimension; import java util Enumeration; import java util Vector; import javax swing JLabel; import javax swing JTable; import javax swing UIManager; import javax swing table DefaultTableCellRenderer; import javax swing table JTableHeader; import javax swing table TableCellRenderer; import javax swing table TableColumn; public class ColumnGroup protected TableCellRenderer renderer; protected Vector v; protected String text; protected int margin = ; public ColumnGroup(String text) this(null text); public ColumnGroup(TableCellRenderer renderer String text) if (renderer == null) this renderer = new DefaultTableCellRenderer() public Component getTableCellRendererComponent(JTable table Object value boolean isSelected boolean hasFocus int row int column) JTableHeader header = table getTableHeader(); if (header != null) setForeground(header getForeground()); setBackground(header getBackground()); setFont(header getFont()); setHorizontalAlignment(JLabel CENTER); this setText((value == null) ? : value toString()); setBorder(UIManager getBorder( TableHeader cellBorder )); return this; ; else this renderer = renderer; this text = text; v = new Vector(); /** * @param obj * TableColumn or ColumnGroup */ public void add(Object obj) if (obj == null) return; v addElement(obj); /** * @param c * TableColumn * @param v * ColumnGroups */ public Vector getColumnGroups(TableColumn c Vector g) g addElement(this); if (ntains(c)) return g; Enumeration enumeration = v elements(); while (enumeration hasMoreElements()) Object obj = enumeration nextElement(); if (obj instanceof ColumnGroup) Vector groups = (Vector) ((ColumnGroup) obj) getColumnGroups(c (Vector) g clone()); if (groups != null) return groups; return null; public TableCellRenderer getHeaderRenderer() return renderer; public Object getHeaderValue() return text; public int getSize() return v == null ? : v size(); public Dimension getSize(JTable table) Component p = renderer getTableCellRendererComponent(table getHeaderValue() false false ); int height = p getPreferredSize() height; int width = ; Enumeration enumeration = v elements(); while (enumeration hasMoreElements()) Object obj = enumeration 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); /** * * 创建日期:( : : ) * * @return java lang String */ public java lang String getText() return text; /** * 列表头中删除Column 创建日期:( : : ) */ public boolean removeColumn(ColumnGroup ptg TableColumn tc) boolean retFlag = false; if (tc != null) for (int i = ; i < ptg.v.size(); i++) Object tmpObj = ptg.v.get(i); if (tmpObj instanceof ColumnGroup) retFlag = removeColumn((ColumnGroup) tmpObj, tc); // 如果找到返回 if (retFlag) break; else if (tmpObj instanceof TableColumn) // 判断是否查找的对象 if (tmpObj == tc) ptg.v.remove(i); retFlag = true; break; return retFlag; /** * 列表头中删除ColumnGrp 删除返回true,否则返回false; 创建日期:(2002-9-25 15:49:00) */ public boolean removeColumnGrp(ColumnGroup ptg, ColumnGroup tg) boolean retFlag = false; if (tg != null) for (int i = 0; i < ptg.v.size(); i++) Object tmpObj = ptg.v.get(i); if (tmpObj instanceof ColumnGroup) // 判断是否查找的对象 if (tmpObj == tg) ptg.v.remove(i); retFlag = true; break; else retFlag = removeColumnGrp((ColumnGroup) tmpObj, tg); // 如果找到返回 if (retFlag) break; else if (tmpObj instanceof TableColumn) break; return retFlag; public void setColumnMargin(int margin) this.margin = margin; Enumeration enumeration = v.elements(); while (enumeration.hasMoreElements()) Object obj = enumeration.nextElement(); if (obj instanceof ColumnGroup) ((ColumnGroup) obj).setColumnMargin(margin); public void setHeaderRenderer(TableCellRenderer renderer) if (renderer != null) this.renderer = renderer; /** * * 创建日期:(2003-7-14 10:53:26) * * @param newText * java.lang.String */ public void setText(java.lang.String newText) text = newText; 2、GroupableHeader继承自JTableHeader,为多表头结构的管理者 import java.util.Enumeration; import java.util.Vector; import javax.swing.table.JTableHeader; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; /** * GroupableTableHeader * @author flyx */ public class GroupableTableHeader extends JTableHeader private static final String uiClassID = "GroupableTableHeaderUI"; protected Vector columnGroups = null; public GroupableTableHeader(TableColumnModel model) super(model); setUI(new GroupableTableHeaderUI()); setReorderingAllowed(false); setRequestFocusEnabled(false); public void addColumnGroup(ColumnGroup g) if (columnGroups == null) columnGroups = new Vector(); columnGroups.addElement(g); /** * * 创建日期:(2001-8-31 15:54:29) */ public void clearColumnGroups() columnGroups = null; public ColumnGroup[] getColumnGroups() ColumnGroup[] retg=null; if (columnGroups.size()>0) retg=new ColumnGroup[columnGroups.size()]; pyInto(retg); return retg; public Enumeration getColumnGroups(TableColumn col) if (columnGroups == null) return null; Enumeration enum = columnGroups.elements(); while (enum.hasMoreElements()) ColumnGroup cGroup = (ColumnGroup) enum.nextElement(); Vector v_ret = (Vector) cGroup.getColumnGroups(col, new Vector()); if (v_ret != null) return v_ret.elements(); return null; /** * Identifies whether or not this ponent can receive the focus. * A disabled button, for example, would return false. cha138/Article/program/Java/JSP/201311/19359相关参考