JTable and optimal column width.

  • Thread starter Christian-Josef Schrattenthaler
  • Start date
C

Christian-Josef Schrattenthaler

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.
 
T

Thomas Hawtin

Christian-Josef Schrattenthaler said:
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
 
I

IchBin

Christian-Josef Schrattenthaler said:
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-)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top