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

Han*_*ank 11 java swing jtable

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

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

kle*_*tra 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);
 }
Run Code Online (Sandbox Code Playgroud)

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

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


小智 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);
}
Run Code Online (Sandbox Code Playgroud)