我有一个表,其中一些对象被渲染并且具有非固定大小(属性列表)。我希望每一行都和它最高的物体一样高,我想知道要做到这一点。我想过做这样的事情(见下文),但我确信还有更好的东西......
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;
}
答案 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)
我会坚持你的解决方案。我认为有一种更简单的方法可以做到这一点。无论你要检查每个单元格的高度,你都可以在渲染每个单元格时做到这一点。