【问题标题】:Automatically adjust Jtable Column to fit content自动调整 Jtable Column 以适应内容
【发布时间】:2013-07-25 08:28:01
【问题描述】:

我正在尝试根据内部数据匹配 JTable 列宽。我的代码:

    for(int column = 0; column < gui.testsuiteInfoTable.getColumnCount(); column ++){
        int  width =0;
    for (int row = 0; row < gui.testsuiteInfoTable.getRowCount(); row++) {
         TableCellRenderer renderer = gui.testsuiteInfoTable.getCellRenderer(row, column);
         Component comp = gui.testsuiteInfoTable.prepareRenderer(renderer, row, column);
         width = Math.max (comp.getPreferredSize().width, width);
         System.out.println(width);
     }
    TableColumn col = new TableColumn();
    col = gui.testsuiteInfoTable.getColumnModel().getColumn(column);
    System.out.println(width);
    col.setWidth(width);
    gui.testsuiteInfoTable.revalidate();

    }
}

我猜尺寸是正确的,但表格列的宽度仍然相同!该表嵌入在 GridBagLayout 中的 ScrollPane 中是这个问题吗?感谢您的任何建议。

【问题讨论】:

标签: java swing jtable preferredsize tablecolumn


【解决方案1】:

这就是你所需要的:

JTable table = new JTable(){
    @Override
       public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
           Component component = super.prepareRenderer(renderer, row, column);
           int rendererWidth = component.getPreferredSize().width;
           TableColumn tableColumn = getColumnModel().getColumn(column);
           tableColumn.setPreferredWidth(Math.max(rendererWidth + getIntercellSpacing().width, tableColumn.getPreferredWidth()));
           return component;
        }
    };
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

表格会自动调整每一列的宽度以适应内容。无需控制何时触发调整大小。

【讨论】:

  • 这行得通,但如果你不添加它,你会收到一个警告,询问你是否需要 serialVersionUID。 +1。
  • 看起来,一旦表格列的大小调整为更大的值,它就不会缩小以适应列的当前状态。
【解决方案2】:

如果您可以使用额外的库,请尝试 Swingx (https://java.net/projects/swingx) 你有一个 JXTable,它有一个方法“packAll()”,它完全符合你的要求

【讨论】:

    【解决方案3】:
    col.setWidth(width);
    

    阅读 JTable API 并点击How to Use Tables 上的链接。在该教程中,他们使用setPreferredWidth(...) 建议列的宽度。

    您可能还想查看为您执行此操作的 Table Column Adjuster。此方案还可以考虑列标题的宽度。

    【讨论】:

    • 谢谢。问题似乎是,如果您不将 JTable 添加到 JScrollPane,则 setWidth 等不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 2014-07-02
    • 1970-01-01
    • 2013-06-05
    • 2016-06-13
    • 2021-09-16
    相关资源
    最近更新 更多