首頁>Program>source

我需要JTable自動調整其列宽的大小以適合內容.我找到了 TableColumnAdjuster 類非常有用.但是有一个小問题.說我有5列,它们的內容很短.在那種情况下,如果我使用自動調节器,它將根据它们的內容設置前四列的宽度,並將所有剩餘空間留给最後一列.請參见示例。

這是最後一欄, Balance 被賦予所有多餘的空間.但是,如果我需要给中間列之一留出空間,该怎麼办? 在上述情况下,我需要將该空間分配给第三列 name .我尝試修改 TableColumnAdjuster 班級的維兹威兹 方法.但是我無法正常工作。

我都尝試過 和 adjustColumns() 用於更改列大小.但似乎並没有改變任何东西.我如何有效地更改 column.setPreferredWidth()的列大小 .如果還有其他選擇或直接解決我的主要問题,那就更好了.谢谢!

column.setWidth()
最新回復
  • 5月前
    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);
    

  • 5月前
    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);
    

    這將按比例為每列分配額外的空間。

  • 5月前
    3 #

    setAutoResizeMode() 会告诉您表格如何調整大小,您應该尝試一下所有可用的選項以查看差異,就我而言,我想专門調整两列的大小,並让其決定如何調整其他所有列。

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

  • 5月前
    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:計算两个日期之間的营業時間