/*
* Initiative - A role playing utility to track turns
* Copyright (C) 2002 Devon D Jones
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package plugin.initiative.gui;
import javax.swing.JTable;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import java.util.Enumeration;
/**
* @author LodgeR
* <p>GradesViewColumnModel</p>
* <p>edit method description . . .</p>
*/
public class AutoSizingColumnModel extends DefaultTableColumnModel
{
private static final int COLUMN_WIDTH_PADDING = 10;
JTable m_table = null;
/**
* Set preffered column width
* @param aColumn
*/
public void setColumnPreferredWidth(TableColumn aColumn)
{
if (m_table != null)
{
TableCellRenderer renderer = null;
int rowCount = m_table.getRowCount();
int headerWidth = 0;
int contentsWidth = 0;
if (aColumn.getHeaderRenderer() != null)
{
renderer = aColumn.getHeaderRenderer();
}
else
{
renderer = m_table.getTableHeader().getDefaultRenderer();
}
if (renderer != null)
{
headerWidth =
renderer.getTableCellRendererComponent(m_table,
aColumn.getHeaderValue(), false, false, 0, 0)
.getPreferredSize().width;
}
renderer =
m_table.getDefaultRenderer(m_table.getModel()
.getColumnClass(getColumnCount()));
if (renderer != null && getColumnCount() > 0)
{
for (int row = 0; row < rowCount; row++)
{
contentsWidth =
Math.max(contentsWidth,
renderer
.getTableCellRendererComponent(
m_table,
m_table.getModel().getValueAt(row,
getColumnCount()), false, false,
row, 0).getPreferredSize().width);
}
}
aColumn.setPreferredWidth(Math.max(headerWidth, contentsWidth)
+ getColumnMargin() + COLUMN_WIDTH_PADDING);
}
else
{
aColumn.setPreferredWidth(150);
}
}
/**
* Get total preferred width
* @return total preferred width
*/
public int getTotalPreferredWidth()
{
int returnValue = 0;
Enumeration<TableColumn> columns = getColumns();
while (columns.hasMoreElements())
{
returnValue += columns.nextElement().getPreferredWidth();
}
return returnValue;
}
/* (non-Javadoc)
* @see javax.swing.table.TableColumnModel#addColumn(javax.swing.table.TableColumn)
*/
@Override
public void addColumn(TableColumn aColumn)
{
setColumnPreferredWidth(aColumn);
super.addColumn(aColumn);
}
/**
* @param table
*/
public void referenceTable(JTable table)
{
m_table = table;
}
}