【问题标题】:How to resize jTable to fit their contents including its header?如何调整 jTable 的大小以适应其内容,包括其标题?
【发布时间】:2017-06-30 21:46:31
【问题描述】:

我创建了一个有 0 行和 0 列的 jTable,因为内容(包括标题名称)将根据按钮动态添加。我正在使用TableCellrenderer 来调整列的大小。在我的代码中,所有列仅根据标题值进行排列,此外,如果所有列宽的总和小于 jTable 宽度的总和,它应该覆盖整个表格。我不知道该怎么做,也不知道我的代码有什么问题。提前致谢

public void tableresize(JTable table)
{
  for(int i=0;i<table.getColumnCount();i++)
  { 
    DefaultTableColumnModel colModel = (DefaultTableColumnModel) table.getColumnModel();
    TableColumn col = colModel.getColumn(i);
    int width = 0;
    TableCellRenderer renderer = col.getHeaderRenderer();
    if (renderer == null)
    {
      renderer = table.getTableHeader().getDefaultRenderer();
    }
    Component comp = renderer.getTableCellRendererComponent(table, col.getHeaderValue(), false, false, 0, i);  
    if(table.getRowCount()>0)
    {
      for(int r=0;r<table.getRowCount();r++)
      {
        renderer=table.getCellRenderer(r,i);
        Component comp1=renderer.getTableCellRendererComponent(table,table.getValueAt(r, i),false,false, r, i);     
        if(comp.getPreferredSize().width<comp1.getPreferredSize().width)
        {
          width=comp1.getPreferredSize().width;
        }
        else
        {
          width=comp.getPreferredSize().width;
        }
      }
    }
    else
    {
      width=comp.getPreferredSize().width;
    }  
    col.setPreferredWidth(width+4);      
  }    
}

【问题讨论】:

    标签: java swing resize jtable


    【解决方案1】:

    在我的代码中,所有列仅根据标题值进行排列

    好吧,我猜你只在行数为 0 时调用你的代码。

    查看Table Column Adjuster 以获取计算列宽的类。当您添加/删除数据行或更改单元格中的数据时,可以动态调用代码。

    【讨论】:

    • 感谢您的帮助。有用。但是如果我所有列的宽度总和小于总宽度,则所有列都排列在一侧(列不完全覆盖表格)
    • @previn,我从未尝试过,但您也许可以将上述课程与这篇帖子中的建议结合起来:stackoverflow.com/questions/15234691/…
    • 我通过使用一些额外的条件得到了上述类的解决方案。如果总宽度太低,我启用 AUTO_RESIZE_ALL_COLUMNS .. 工作得很好。谢谢
    猜你喜欢
    • 2021-05-21
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多