簡體   English   中英

自動調整 JTable 列寬

[英]Auto resizing the JTable column widths

我需要我的 JTable 自動調整其列寬以適應內容。 我發現TableColumnAdjuster class 非常有用。 但是有一個小問題。 假設我有 5 列,它們的內容很短。 在這種情況下,如果我使用自動調整器,它會根據它們的內容設置前四列的寬度,並將所有 rest 的空間分配給最后一列。 請參閱示例。

在此處輸入圖像描述

在最后一列, Balance被賦予了所有多余的空間。 但是,如果我需要將該空間留給中間列之一怎么辦。 在上述情況下,我需要將該空間分配給第三列name 我嘗試修改TableColumnAdjuster類的adjustColumns()方法。 但我無法讓它工作。

我嘗試了column.setPreferredWidth()column.setWidth()來更改列大小。 但似乎並沒有改變什么。 如何有效地更改JTable的列大小。 如果我的主要問題有其他選擇或直接答案,那就更好了。 謝謝!

您可以嘗試下一個:

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);
    }
}

JTable

這需要在resize方法之前執行。
如果你有:

table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

JTable

沒有選項可以自動將一列的大小調整為大於另一列的大小。

也許您可以執行以下操作:

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);

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

setAutoResizeMode()會告訴您表如何調整大小,您應該嘗試一下所有可用的選項以查看差異,就我而言,我想專門調整兩列的大小並讓其決定如何調整其他所有列。

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

你可以這樣做:

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

通過對Paul Vargas 的回答稍作修改,您還可以考慮 header 列的大小:

public static void resizeColumnWidth(JTable table) {
    final TableColumnModel columnModel = table.getColumnModel();
    for (int column = 0; column < table.getColumnCount(); column++) {
        // Account for header size
        double width = table.getTableHeader().getHeaderRect(column).getWidth();
        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((int) width);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM