在JTable上调用setRowHeight会立即重置int方法参数

时间:2011-05-12 16:32:36

标签: java swing jtable

我无法理解为什么会发生这种情况。我一直在网上搜索类似的问题,但找不到。

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变量。你认为我的调试器是在旧代码上运行,是破坏还是这可能是时代的结束?

1 个答案:

答案 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使用此代码。单击“按值类型”,然后选择“图标”以查看它是否正常工作。