Hi!
I have a JTable which has to columns filled over an 'String[][]'. Is it
possible, to set the cell width to the longest value in an column?
I found a solution with String.lengt() over Google, but this doesn't work
correctly because the value of String.length() doesn't fit exactly. I think
this is because the proportional fonts.
Greetings,
Christian.
Thomas Hawtin - 23 Jul 2006 15:05 GMT
> I have a JTable which has to columns filled over an 'String[][]'. Is it
> possible, to set the cell width to the longest value in an column?
Briefly having a look at some of my old code, I've used
JTable.prepareRenderer on TableColumn.getCellRenderer. Then it's a
matter of setting the column preferred width to the maximum of the
preferred widths given by the renderer component. You probably want to
consider the header as well.
> I found a solution with String.lengt() over Google, but this doesn't work
> correctly because the value of String.length() doesn't fit exactly. I think
> this is because the proportional fonts.
String length will give you the number of characters in the text. If you
set the width to one pixel per character, it's probably going to be a
tad short.
Tom Hawtin

Signature
Unemployed English Java programmer
http://jroller.com/page/tackline/
IchBin - 23 Jul 2006 18:14 GMT
> Hi!
>
[quoted text clipped - 7 lines]
> Greetings,
> Christian.
If I understand your problem. Here is a method that will expand the
columns to the largest cell\column..
public void calcColumnWidths(JTable table)
{
JTableHeader header = table.getTableHeader();
TableCellRenderer defaultHeaderRenderer = null;
if (header != null)
defaultHeaderRenderer = header.getDefaultRenderer();
TableColumnModel columns = table.getColumnModel();
TableModel data = table.getModel();
int margin = columns.getColumnMargin(); // only JDK1.3
int rowCount = data.getRowCount();
int totalWidth = 0;
for (int i = columns.getColumnCount() - 1; i >= 0; --i)
{
TableColumn column = columns.getColumn(i);
int columnIndex = column.getModelIndex();
int width = -1;
TableCellRenderer h = column.getHeaderRenderer();
if (h == null)
h = defaultHeaderRenderer;
if (h != null) // Not explicitly impossible
{
Component c = h.getTableCellRendererComponent(table, column
.getHeaderValue(), false, false, -1, i);
width = c.getPreferredSize().width;
}
for (int row = rowCount - 1; row >= 0; --row)
{
TableCellRenderer r = table.getCellRenderer(row, i);
Component c = r.getTableCellRendererComponent(table, data
.getValueAt(row, columnIndex), false, false,
row, i);
width = Math.max(width, c.getPreferredSize().width);
}
if (width >= 0)
column.setPreferredWidth(width + margin); // <1.3:
without margin
else
totalWidth += column.getPreferredWidth();
}
}
Thanks in Advance...
IchBin, Pocono Lake, Pa, USA http://weconsultants.phpnet.us
__________________________________________________________________________
'If there is one, Knowledge is the "Fountain of Youth"'
-William E. Taylor, Regular Guy (1952-)