java - 自动调整 JTable 列宽

标签 java swing jtable tablecolumn

我需要我的 JTable 自动调整其列宽以适应内容。我找到了TableColumnAdjuster课很有用。但是有一个小问题。假设我有 5 列,它们的内容很短。在这种情况下,如果我使用自动调整器,它会根据它们的内容设置前四列的宽度,并将所有剩余空间留给最后一列。请看示例。

enter image description here

这里的最后一列,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

关于java - 自动调整 JTable 列宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17627431/

相关文章:

java - 为什么 setPreferredSize() 有时会优先于 setMinimumSize()?

java - 如何在 Java 中向下移动表格?

java - 为什么具有 DefaultTableModel 的 JTable 不会刷新?

java - 为什么不从父类(super class)继承 OSGi 声明性服务 (DS) 注释?

java - 如何将此 JScrollPane 类添加到我的 swing 构建器中?

java - 如何设置JInternalFrame最小化标题背景?

java - 单击表从数据库中获取的错误

java - 为什么它保持 lib/modules 锁定?

java - Spring中的路径属性

java - 在构造函数中使用 setter 方法 : bad practice?