我有一个JTable,它将最后一列数据字段更改为不同的字符串值。我想将列调整为字符串长度。字符串长度与宽度的公式是什么?
我将使用JTable.getColumnModel().getColumn().setPreferredWidth()
所以我想知道如何将字符串长度转换为宽度值。
答案 0 :(得分:15)
你并不真正对字符串长度感兴趣(也不是它对特定字体/指标的映射)。您对呈现单元格内容的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,则关闭手动配置。
答案 1 :(得分:5)
此方法将在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<table.getRowCount(); r++) {
renderer = table.getCellRenderer(r, vColIndex);
comp = renderer.getTableCellRendererComponent(
table, table.getValueAt(r, vColIndex), false, false, r, vColIndex);
width = Math.max(width, comp.getPreferredSize().width);
}
// Add margin
width += 2*margin;
// Set the width
col.setPreferredWidth(width);
}
答案 2 :(得分:4)
Table Column Adjuster可以静态和动态地工作,用户可以控制它。