SWING JTable:我如何使每一行都像它的最高对象一样高?

时间:2010-12-29 12:15:38

标签: java swing jtable

我有一个表,其中一些对象被渲染并且具有非固定大小(属性列表)。我希望每一行都和它最高的物体一样高,我想知道要做到这一点。我想过做这样的事情(见下文),但我确信还有更好的东西......

public Component getTableCellRendererComponent(JTable table, Object value,
                                                 boolean isSelected,
                                                 boolean hasFocus, int row,
                                                 int column)
  {
      /*....*/

      this.setListData((Object[])value);
      int height = new Double(getPreferredSize().getHeight()).intValue();
      if (table.getRowHeight(row) < height)
          table.setRowHeight(row, height);    
      /*....*/

      return this;
  }

2 个答案:

答案 0 :(得分:1)

在渲染器中不应该有类似的代码。相反,当您将数据加载到模型中时,请执行以下操作:

private void updateRowHeights()
{
    try
    {
        for (int row = 0; row < table.getRowCount(); row++)
        {
            int rowHeight = table.getRowHeight();

            for (int column = 0; column < table.getColumnCount(); column++)
            {
                Component comp = table.prepareRenderer(table.getCellRenderer(row, column), row, column);
                rowHeight = Math.max(rowHeight, comp.getPreferredSize().height);
            }

            table.setRowHeight(row, rowHeight);
        }
    }
    catch(ClassCastException e) {}
}

答案 1 :(得分:0)

我会坚持你的解决方案。我认为有一种更简单的方法可以做到这一点。无论你要检查每个单元格的高度,你都可以在渲染每个单元格时做到这一点。