Java SWING JTable:如何使每行尽可能高';最高的物体是什么?

Java SWING JTable:如何使每行尽可能高';最高的物体是什么?,java,swing,jtable,Java,Swing,Jtable,我有一个表,其中一些对象是渲染的,并且大小不固定(属性列表)。我希望每一排都和最高的物体一样高,我想知道怎么做。我曾想过做类似的事情(见下文),但我相信还有更好的事情 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,

我有一个表,其中一些对象是渲染的,并且大小不固定(属性列表)。我希望每一排都和最高的物体一样高,我想知道怎么做。我曾想过做类似的事情(见下文),但我相信还有更好的事情

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;
  }
公共组件GetTableCellRenderComponent(JTable表、对象值、,
他当选了,,
布尔hasFocus,int行,
int列)
{
/*....*/
此.setListData((对象[])值);
int height=new Double(getPreferredSize().getHeight()).intValue();
if(表.getRowHeight(行)<高度)
表.设置行高(行高);
/*....*/
归还这个;
}

我会坚持你的解决方案。我认为没有比这更简单的方法了。不管你要做什么,都要检查每个单元格的高度,所以你最好在渲染每个单元格时这样做。

我会坚持你的解决方案。我认为没有比这更简单的方法了。不管你要做什么,都要检查每个单元格的高度,所以你最好在渲染每个单元格时进行检查。

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

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) {}
}
private void updateRowHeights()
{
尝试
{
对于(int row=0;row
在渲染器中不应该有这样的代码。相反,当您将数据加载到模型中时,请执行以下操作:

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) {}
}
private void updateRowHeights()
{
尝试
{
对于(int row=0;row
谢谢-但是你能详细说明一下为什么我不应该在渲染器中使用这种代码吗?我有一种直觉认为这是错误的,但我不知道为什么..渲染器用于在表的单元格中显示值。它不应用于更改表的属性。它不需要知道关于表格的任何信息,只需要显示数据。听起来不错,谢谢。但是,此功能何时运行?我应该什么时候调用它?谢谢-但是你能详细说明一下为什么我不应该在渲染器中使用这种代码吗?我有一种直觉认为这是错误的,但我不知道为什么..渲染器用于在表的单元格中显示值。它不应用于更改表的属性。它不需要知道关于表格的任何信息,只需要显示数据。听起来不错,谢谢。但是,此功能何时运行?我应该什么时候叫它?