首页>Program>source

我需要JTable自动调整其列宽的大小以适合内容.我找到了 TableColumnAdjuster 类非常有用.但是有一个小问题.说我有5列,它们的内容很短.在那种情况下,如果我使用自动调节器,它将根据它们的内容设置前四列的宽度,并将所有剩余空间留给最后一列.请参见示例。

这是最后一栏, Balance 被赋予所有多余的空间.但是,如果我需要给中间列之一留出空间,该怎么办? 在上述情况下,我需要将该空间分配给第三列 name .我尝试修改 TableColumnAdjuster 班级的维兹威兹 方法.但是我无法正常工作。

我都尝试过 和 adjustColumns() 用于更改列大小.但似乎并没有改变任何东西.我如何有效地更改 column.setPreferredWidth()的列大小 .如果还有其他选择或直接解决我的主要问题,那就更好了.谢谢!

column.setWidth()
最新回答
  • 2021-1-11
    1 #

    您可以尝试下一个:

    public void resizeColumnWidth(JTable table) {
        final TableColumnModel columnModel = table.getColumnModel();
        for (int column = 0; column < table.getColumnCount(); column++) {
            int width = 15; // Min width
            for (int row = 0; row < table.getRowCount(); row++) {
                TableCellRenderer renderer = table.getCellRenderer(row, column);
                Component comp = table.prepareRenderer(renderer, row, column);
                width = Math.max(comp.getPreferredSize().width +1 , width);
            }
            if(width > 300)
                width=300;
            columnModel.getColumn(column).setPreferredWidth(width);
        }
    }
    

    这需要在resize方法之前执行。
    如果您有:

    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    

  • 2021-1-11
    2 #

    没有选项可以自动调整比 其他。

    也许您可以这样做:

    tca = new TableColumnAdjuster( table, 0 );
    tca.adjustColumns();
    TableColumnModel tcm = table.getColumnModel();  
    TableColumn tc = tcm.getColumn(1);
    tc.setWidth(tc.getWidth() + 25);
    

    这将允许您在第1列中添加额外的空间。仅在第一次显示表格时才添加此额外的空间。

    另一种选择是使用:

    table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
    

    这将按比例为每列分配额外的空间。

  • 2021-1-11
    3 #

    setAutoResizeMode() 会告诉您表格如何调整大小,您应该尝试一下所有可用的选项以查看差异,就我而言,我想专门调整两列的大小,并让其决定如何调整其他所有列。

    jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
    TableColumnModel colModel=jTable1.getColumnModel();
    colModel.getColumn(1).setPreferredWidth(25);    
    colModel.getColumn(2).setPreferredWidth(400);
    

  • 2021-1-11
    4 #

    您可以执行以下操作:

    JPanel jp = new JPanel();
    jp.add(table);
    jp.setLayout(new GridLayout(1,1)); /* little trick ;) and believe me that this step is important to the automatic all columns resize! A import is also needed for using GridLayout*/
    table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); // this is obvius part
    

  • c#:TextRendererMeasureText和GraphicsMeasureString大小不匹配
  • sql:计算两个日期之间的营业时间