package edu.harvard.wcfia.yoshikoder.ui; import java.awt.Component; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableColumnModel; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableModel; public class TableUtil { public static void packTableColumns(JTable table, int margin){ table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); for (int ii=0; ii<table.getColumnCount(); ii++){ packColumn(table, ii, margin); } } public static void packColumn(JTable table, int vColIndex, int margin){ TableModel model = table.getModel(); DefaultTableColumnModel colModel = (DefaultTableColumnModel)table.getColumnModel(); TableColumn col = colModel.getColumn(vColIndex); int width = 0; /* TableCellRenderer renderer = col.getHeaderRenderer(); if (renderer == null) renderer = table.getTableHeader().getDefaultRenderer(); Component comp = renderer.getTableCellRendererComponent( table, col.getHeaderValue(), false, false, 0, 0); width = comp.getPreferredSize().width; */ TableCellRenderer renderer; Component comp; for (int r=0; r<table.getRowCount(); r++){ renderer = table.getCellRenderer(r, vColIndex); comp = renderer.getTableCellRendererComponent( table, model.getValueAt(r, vColIndex), false, false, r, vColIndex); width = Math.max(width, comp.getPreferredSize().width); } System.err.println(width); width += 2*margin; col.setPreferredWidth(width); } public static void main(String[] args) { JTable t = new JTable(1, 2); t.setValueAt("Foo", 0, 0); t.setValueAt("Ggogogogoogog", 0, 1); t.setTableHeader(null); packTableColumns(t, 2); JOptionPane.showMessageDialog(null, new JScrollPane(t)); } }