簡體   English   中英

SWING JTable:如何使每一行與它的最高對象一樣高?

[英]SWING JTable: How do I make each row as high as it's tallest object?

我有一張桌子,其中呈現了一些對象,它們的大小是不固定的(屬性列表)。 我希望每一行都與它的最高對象一樣高,我很想這樣做。 我考慮過要做這樣的事情(見下文),但是我敢肯定還有更好的事情。

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

渲染器中不應包含類似的代碼。 相反,當您將數據加載到模型中時,請執行以下操作:

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

我會堅持使用您的解決方案。 我認為沒有比這更簡單的方法了。 不管您要檢查每個單元格的高度如何,因此在渲染每個單元格時也可以這樣做。

暫無
暫無

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

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