我无法理解为什么会发生这种情况。我一直在网上搜索类似的问题,但找不到。
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变量。你认为我的调试器是在旧代码上运行,是破坏还是这可能是时代的结束?
答案 0 :(得分:2)
以下是我用来设置行高的代码:
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使用此代码。单击“按值类型”,然后选择“图标”以查看它是否正常工作。