Resize JTable columns to suit table contents
<p>I used the code pasted below to resize the column width with a delay of 5 seconds once the JTable gets displayed. However, when I run "TestColumnResizer.java", it shows error "java.lang.NoClassDefFoundError", main not found. How can I modify the code to get it run?Or how can I call the TestColumnResizer program in some other class?</p>

<pre><code>public class ColumnResizer {
    public static void adjustColumnPreferredWidths(JTable table) {
        // strategy - get max width for cells in column and
        // make that the preferred width
        TableColumnModel columnModel = table.getColumnModel();
        for (int col = 0; col &lt; table.getColumnCount(); col++) {

            int maxwidth = 0;
            for (int row = 0; row &lt; table.getRowCount(); row++) {
                TableCellRenderer rend = table.getCellRenderer(row, col);
                Object value = table.getValueAt(row, col);
                Component comp = rend.getTableCellRendererComponent(table,
                        value, false, false, row, col);
                maxwidth = Math.max(comp.getPreferredSize().width, maxwidth);
            } // for row
            TableColumn column = columnModel.getColumn(col);
            column.setPreferredWidth(maxwidth);
        } // for col
    }
}

// Testing automatic column sizing

public class TestColumnResizer {
    final static Object[][] TABLE_DATA = {
            { new Integer(1), "ONJava", "http://www.onjava.com/" },
            { new Integer(2), "Joshy's Site", "http://www.joshy.org/" },
            { new Integer(3), "Anime Weekend Atlanta",
                    "http://www.awa-con.com/" },
            { new Integer(4), "QTJ book",
                    "http://www.oreilly.com/catalog/quicktimejvaadn/" } };

    final static String[] COLUMN_NAMES = { "Count", "Name", "URL" };

    public static void main(String[] args) {
        // 142 mac l&amp;f has a header bug - force metal for today
        try {

            UIManager.setLookAndFeel(UIManager
                    .getCrossPlatformLookAndFeelClassName());
        } catch (Exception e) {
            e.printStackTrace();
        }
        DefaultTableModel mod = new DefaultTableModel(TABLE_DATA, COLUMN_NAMES);
        JTable table = new JTable(mod);
        JScrollPane pane =

        new JScrollPane(table, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        JFrame frame = new JFrame("JTable Column Widths");
        frame.getContentPane().add(pane);
        frame.pack();
        frame.setVisible(true);

        try {
            Thread.sleep(5000);
        } catch (Exception e) {
            e.printStackTrace();
        }

        // now get smart about col widths
        final JTable fTable = table;
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                ColumnResizer.adjustColumnPreferredWidths(fTable);
                fTable.revalidate();
            }
        });
    }
}
</code></pre>
