JTable and optimal column width.  
Author Message
Christian-Josef Schrattenthaler





PostPosted: 2006-7-23 20:40:00 Top

java-programmer, JTable and optimal column width. 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





PostPosted: 2006-7-23 22:08:00 Top

java-programmer >> JTable and optimal column width. Christian-Josef Schrattenthaler wrote:
>
> 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
--
Unemployed English Java programmer
http://jroller.com/page/tackline/
 
IchBin





PostPosted: 2006-7-24 1:14:00 Top

java-programmer >> JTable and optimal column width. Christian-Josef Schrattenthaler wrote:
> 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.
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-)