001: package org.gui4j.core.swing;
002:
003: import java.awt.Component;
004: import java.awt.Dimension;
005: import java.util.Enumeration;
006: import java.util.Vector;
007:
008: import javax.swing.JTable;
009: import javax.swing.SwingConstants;
010: import javax.swing.UIManager;
011: import javax.swing.table.DefaultTableCellRenderer;
012: import javax.swing.table.JTableHeader;
013: import javax.swing.table.TableCellRenderer;
014: import javax.swing.table.TableColumn;
015:
016: /**
017: * ColumnGroup
018: *
019: * @version 1.0 10/20/98
020: * @author Nobuo Tamemasa
021: */
022:
023: public class ColumnGroup {
024: protected TableCellRenderer renderer;
025: protected Vector v;
026: protected String text;
027: protected int margin = 0;
028:
029: public ColumnGroup(String text) {
030: this (null, text);
031: }
032:
033: public ColumnGroup(TableCellRenderer renderer, String text) {
034: if (renderer == null) {
035: this .renderer = new DefaultTableCellRenderer() {
036: public Component getTableCellRendererComponent(
037: JTable table, Object value, boolean isSelected,
038: boolean hasFocus, int row, int column) {
039: JTableHeader header = table.getTableHeader();
040: if (header != null) {
041: setForeground(header.getForeground());
042: setBackground(header.getBackground());
043: setFont(header.getFont());
044: }
045: setHorizontalAlignment(SwingConstants.CENTER);
046: setText((value == null) ? "" : value.toString());
047: setBorder(UIManager
048: .getBorder("TableHeader.cellBorder"));
049: return this ;
050: }
051: };
052: } else {
053: this .renderer = renderer;
054: }
055: this .text = text;
056: v = new Vector();
057: }
058:
059: /**
060: * @param obj TableColumn or ColumnGroup
061: */
062: public void add(Object obj) {
063: if (obj == null) {
064: return;
065: }
066: v.addElement(obj);
067: }
068:
069: /**
070: * @param c TableColumn
071: * @param g ColumnGroups
072: * @return Vector
073: */
074: public Vector getColumnGroups(TableColumn c, Vector g) {
075: g.addElement(this );
076: if (v.contains(c))
077: return g;
078: Enumeration en = v.elements();
079: while (en.hasMoreElements()) {
080: Object obj = en.nextElement();
081: if (obj instanceof ColumnGroup) {
082: Vector groups = ((ColumnGroup) obj).getColumnGroups(c,
083: (Vector) g.clone());
084: if (groups != null)
085: return groups;
086: }
087: }
088: return null;
089: }
090:
091: public TableCellRenderer getHeaderRenderer() {
092: return renderer;
093: }
094:
095: public void setHeaderRenderer(TableCellRenderer renderer) {
096: if (renderer != null) {
097: this .renderer = renderer;
098: }
099: }
100:
101: public Object getHeaderValue() {
102: return text;
103: }
104:
105: public Dimension getSize(JTable table) {
106: Component comp = renderer.getTableCellRendererComponent(table,
107: getHeaderValue(), false, false, -1, -1);
108: int height = comp.getPreferredSize().height;
109: int width = 0;
110: Enumeration en = v.elements();
111: while (en.hasMoreElements()) {
112: Object obj = en.nextElement();
113: if (obj instanceof TableColumn) {
114: TableColumn aColumn = (TableColumn) obj;
115: width += aColumn.getWidth();
116: } else {
117: width += ((ColumnGroup) obj).getSize(table).width;
118: }
119: }
120: return new Dimension(width, height);
121: }
122:
123: public void setColumnMargin(int margin) {
124: this .margin = margin;
125: Enumeration enumeration = v.elements();
126: while (enumeration.hasMoreElements()) {
127: Object obj = enumeration.nextElement();
128: if (obj instanceof ColumnGroup) {
129: ((ColumnGroup) obj).setColumnMargin(margin);
130: }
131: }
132: }
133: }
|