Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / July 2006

Tip: Looking for answers? Try searching our database.

JTable and optimal column width.

Thread view: 
Christian-Josef Schrattenthaler - 23 Jul 2006 13:39 GMT
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-)


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.