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