如何将JTable列调整为字符串长度?

我有一个JTable,它将最后一列数据字段更改为不同的字符串值。 我想将列的大小调整为字符串长度。 字符串长度与宽度的公式是什么?

我将使用JTable.getColumnModel().getColumn().setPreferredWidth()所以我想知道如何将字符串长度转换为宽度值。

你并不真正对字符串长度感兴趣(也不是它对特定字体/度量的映射)。 您对呈现单元格内容的renderingComponent的preferredSize感兴趣。 为此,循环遍历所有行并查询大小,例如

  int width = 0; for (row = 0; row < table.getRowCount(); row++) { TableCellRenderer renderer = table.getCellRenderer(row, myColumn); Component comp = table.prepareRenderer(renderer, row, myColumn); width = Math.max (comp.getPreferredSize().width, width); } 

或者使用JXTable(在SwingX项目中):它有一个方法pack()可以为你工作:-)

编辑:更喜欢表的prepareRenderer而不是在渲染器上手动调用getXXRendererComponent的原因是表可能会修饰renderingComponent的可视属性。 如果这些装饰影响组件的prefSize,则关闭手动配置。

此方法将在JTable中打包给定列 –

 /** * Sets the preferred width of the visible column specified by vColIndex. The column * will be just wide enough to show the column head and the widest cell in the column. * margin pixels are added to the left and right * (resulting in an additional width of 2*margin pixels). */ public static void packColumn(JTable table, int vColIndex, int margin) { DefaultTableColumnModel colModel = (DefaultTableColumnModel)table.getColumnModel(); TableColumn col = colModel.getColumn(vColIndex); int width = 0; // Get width of column header TableCellRenderer renderer = col.getHeaderRenderer(); if (renderer == null) { renderer = table.getTableHeader().getDefaultRenderer(); } java.awt.Component comp = renderer.getTableCellRendererComponent( table, col.getHeaderValue(), false, false, 0, 0); width = comp.getPreferredSize().width; // Get maximum width of column data for (int r=0; r 

表列调整器静态和动态工作,用户可以控制它。