2010-08-11 103 views
9

我无法动态更改我的行的高度,是否有我需要重载的方法?JTable动态更改行高

- 编辑 -

对不起,短后这是我第一次....真的是我的问题,改变依赖于内容的行高做。所以到目前为止,我做了一个实现TabelCellRenderer的内部类。

这就是我现在正在做的行高计算。

private static class TextAreaRenderer extends JTextPane implements TableCellRenderer 
    { 


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

     this.setText(((String)value).getEntityName()); 
     int height = new Double(this.getPreferredSize().getHeight()).intValue(); 
     if (table.getRowHeight(row) < height) 
      table.setRowHeight(row, height); 

     /* some more code */ 

     return this; 
    } 

}

这将是这样做的正确方法? 谢谢。

+3

不,渲染器不应该改变表格行的高度。这应该在数据添加到模型时完成。这意味着您将在创建表格时进行计算。然后,您将使用TableModelListener监听数据的更改,然后重新计算。 – camickr 2010-08-11 19:54:50

+1

谢谢,这是一个更好的解决方案,因为它会在数据层和视图层之间创建分离。此外,我只需要在一个地方有代码,而不必担心每次更改表格布局时都会创建更新代码。 – kohlerfc 2010-08-11 22:01:05

+3

@camickr,数据与视图无关。在将数据添加到模型时,它应该如何计算高度的行?模型和数据必须独立于视图。 ** IS **确实是设计的视图部分,它应该对如何在要显示的任何小部件中适合某些数据进行计算。我并不是说它应该是渲染器,但肯定模型不应该。 – Sebastian 2012-02-22 09:01:46

回答

5
table.setRowHeight(...); 

如果您需要更多帮助发布您的SSCCE

+0

已被接受。非常直接地回答... – gumuruh 2012-01-20 07:20:06

2

您只需致电setRowHeight(row, height);即可。例如:

JTable t = new JTable(5, 5); 
t.setRowHeight(2, 30); 

会将第3行设置为30高。

你的问题更复杂吗?你没有多说这个问题。