package javax.swing.table;
import java.beans.PropertyChangeListener;
import java.io.Serializable;
import javax.swing.event.SwingPropertyChangeSupport;
public class TableColumn
implements Serializable
{
static final long serialVersionUID = -6113660025878112608L;
public static final String COLUMN_WIDTH_PROPERTY = "columWidth";
public static final String HEADER_VALUE_PROPERTY = "headerValue";
public static final String HEADER_RENDERER_PROPERTY = "headerRenderer";
public static final String CELL_RENDERER_PROPERTY = "cellRenderer";
protected int modelIndex;
protected Object identifier;
protected int width;
protected int minWidth = 15;
private int preferredWidth;
protected int maxWidth = Integer.MAX_VALUE;
protected TableCellRenderer headerRenderer;
protected Object headerValue;
protected TableCellRenderer cellRenderer;
protected TableCellEditor cellEditor;
protected boolean isResizable = true;
protected transient int resizedPostingDisableCount;
private SwingPropertyChangeSupport changeSupport =
new SwingPropertyChangeSupport(this);
public TableColumn()
{
this(0, 75, null, null);
}
public TableColumn(int modelIndex)
{
this(modelIndex, 75, null, null);
}
public TableColumn(int modelIndex, int width)
{
this(modelIndex, width, null, null);
}
public TableColumn(int modelIndex, int width,
TableCellRenderer cellRenderer, TableCellEditor cellEditor)
{
this.modelIndex = modelIndex;
this.width = width;
this.preferredWidth = width;
this.cellRenderer = cellRenderer;
this.cellEditor = cellEditor;
this.headerValue = null;
this.identifier = null;
}
private void firePropertyChange(String property, Object oldValue,
Object newValue)
{
changeSupport.firePropertyChange(property, oldValue, newValue);
}
private void firePropertyChange(String property, int oldValue, int newValue)
{
firePropertyChange(property, new Integer(oldValue), new Integer(newValue));
}
private void firePropertyChange(String property, boolean oldValue,
boolean newValue)
{
firePropertyChange(property, Boolean.valueOf(oldValue),
Boolean.valueOf(newValue));
}
public void setModelIndex(int modelIndex)
{
this.modelIndex = modelIndex;
}
public int getModelIndex()
{
return modelIndex;
}
public void setIdentifier(Object identifier)
{
this.identifier = identifier;
}
public Object getIdentifier()
{
if (identifier == null)
return getHeaderValue();
return identifier;
}
public void setHeaderValue(Object headerValue)
{
if (this.headerValue == headerValue)
return;
Object oldValue = this.headerValue;
this.headerValue = headerValue;
firePropertyChange(HEADER_VALUE_PROPERTY, oldValue, headerValue);
}
public Object getHeaderValue()
{
return headerValue;
}
public void setHeaderRenderer(TableCellRenderer renderer)
{
if (headerRenderer == renderer)
return;
TableCellRenderer oldRenderer = headerRenderer;
headerRenderer = renderer;
firePropertyChange(HEADER_RENDERER_PROPERTY,
oldRenderer, headerRenderer);
}
public TableCellRenderer getHeaderRenderer()
{
return headerRenderer;
}
public void setCellRenderer(TableCellRenderer renderer)
{
if (cellRenderer == renderer)
return;
TableCellRenderer oldRenderer = cellRenderer;
cellRenderer = renderer;
firePropertyChange(CELL_RENDERER_PROPERTY,
oldRenderer, cellRenderer);
}
public TableCellRenderer getCellRenderer()
{
return cellRenderer;
}
public void setCellEditor(TableCellEditor cellEditor)
{
this.cellEditor = cellEditor;
}
public TableCellEditor getCellEditor()
{
return cellEditor;
}
public void setWidth(int newWidth)
{
int oldWidth = width;
if (newWidth < minWidth)
width = minWidth;
else if (newWidth > maxWidth)
width = maxWidth;
else
width = newWidth;
if (width == oldWidth)
return;
firePropertyChange(COLUMN_WIDTH_PROPERTY, oldWidth, width);
}
public int getWidth()
{
return width;
}
public void setPreferredWidth(int preferredWidth)
{
if (preferredWidth < minWidth)
this.preferredWidth = minWidth;
else if (preferredWidth > maxWidth)
this.preferredWidth = maxWidth;
else
this.preferredWidth = preferredWidth;
}
public int getPreferredWidth()
{
return preferredWidth;
}
public void setMinWidth(int minWidth)
{
this.minWidth = minWidth;
setWidth(getWidth());
setPreferredWidth(getPreferredWidth());
}
public int getMinWidth()
{
return minWidth;
}
public void setMaxWidth(int maxWidth)
{
this.maxWidth = maxWidth;
setWidth(getWidth());
setPreferredWidth(getPreferredWidth());
}
public int getMaxWidth()
{
return maxWidth;
}
public void setResizable(boolean isResizable)
{
this.isResizable = isResizable;
}
public boolean getResizable()
{
return isResizable;
}
public void sizeWidthToFit()
{
}
public void disableResizedPosting()
{
}
public void enableResizedPosting()
{
}
public synchronized void addPropertyChangeListener(PropertyChangeListener listener)
{
changeSupport.addPropertyChangeListener(listener);
}
public synchronized void removePropertyChangeListener(PropertyChangeListener listener)
{
changeSupport.removePropertyChangeListener(listener);
}
public PropertyChangeListener[] getPropertyChangeListeners()
{
return changeSupport.getPropertyChangeListeners();
}
protected TableCellRenderer createDefaultHeaderRenderer()
{
return new DefaultTableCellRenderer();
}
}