我无法理解为什么会发生这种情况。我一直在网上搜索类似的问题,但找不到。
for ( int row = 0; row < getRowCount(); row++ ) {
int rowHeight = this.getRowHeight();
for ( int col = 0; col < this.getColumnCount(); col++ ) {
Component pRenderer = getCellRenderer( row, col );
// Assume this is a dimension of 120x120
Dimension pRendererSize = pRenderer.getPreferredSize();
if ( pRendererSize.height > rowHeight )
rowHeight = pRendererSize.height;
}
this.setRowHeight( row, rowHeight );
}
我的 JTable 中一行的默认高度是 16 像素。如果我打电话:
//This returns 16 initially
this.getRowHeight();
我正在我的调试器中单步调试代码。在 setRowHeight 行,参数 rowHeight 为 120,因此我将行的 rowHeight 设置为 120 像素。我根本没有重载这个方法,这是 setRowHeight 的 JTable 实现。
接下来发生的事情真是令人恐惧。跨过这个方法后,this.getRowHeight()不仅返回16像素,而且rowHeight的值立马变成了16像素。
当然,表格也呈现不正确。这似乎违背了我的 int 值类型参数会通过将其传递给方法而改变的感觉。这根本不应该改变 rowHeight 变量。您认为我的调试器是在旧代码上运行、已损坏还是时代结束了?
最佳答案
这是我用来设置行高的代码:
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) {}
}
UIManager Defaults使用此代码。单击“按值类型”,然后选择“图标”以查看其工作情况。
关于java - 在 JTable 上调用 setRowHeight 会立即重置 int 方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5981335/