我想根据文本设置动态大小的JTable列。我想知道每个X
号码我设置为getColumnModel().getColumn(0).setWidth(X);
可以容纳多少个字符? (字体 Arial 且字体大小 12 )
答案 0 :(得分:2)
我想知道每个X编号我设置为getColumnModel()。getColumn(0).setWidth(X);可以容纳多少个字符?
你无法得到一般答案,因为字符串“iiiii”将小于“wwwww”,因为每个字符可以采用不同数量的像素。
相反,您实际上需要单独确定每个单元格的大小,然后使用最大值。将数据加载到表中后,您将执行此操作。
基本代码是:
JTable table = new JTable( ... );
table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
for (int column = 0; column < table.getColumnCount(); column++)
{
TableColumn tableColumn = table.getColumnModel().getColumn(column);
int preferredWidth = tableColumn.getMinWidth();
int maxWidth = tableColumn.getMaxWidth();
for (int row = 0; row < table.getRowCount(); row++)
{
TableCellRenderer cellRenderer = table.getCellRenderer(row, column);
Component c = table.prepareRenderer(cellRenderer, row, column);
int width = c.getPreferredSize().width + table.getIntercellSpacing().width;
preferredWidth = Math.max(preferredWidth, width);
// We've exceeded the maximum width, no need to check other rows
if (preferredWidth >= maxWidth)
{
preferredWidth = maxWidth;
break;
}
}
tableColumn.setPreferredWidth( preferredWidth );
}
上面的代码将为每列提供静态宽度。
另一种选择是使用Table Column Adjuster。 Table Column Adjuster
将上述逻辑与其他功能结合在一起,可用于确定列宽:
TableModel
之后)或动态地(当数据被编辑或添加到TableModel
时)。答案 1 :(得分:1)
这就是你所需要的:
JTable table = new JTable(){
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component component = super.prepareRenderer(renderer, row, column);
int rendererWidth = component.getPreferredSize().width;
TableColumn tableColumn = getColumnModel().getColumn(column);
tableColumn.setPreferredWidth(Math.max(rendererWidth + getIntercellSpacing().width, tableColumn.getPreferredWidth()));
return component;
}
};
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
该表将自动调整每个列宽以适合内容。无需控制何时触发调整大小。