我正在尝试自动滚动到具有可变行高并定期刷新的 JTable 的底部(在 scrollPane 内)。是否有一个我可以覆盖的监听器,或者一个我可以监听的事件,这将在表格被重绘并在底部使用新行之后发生?
我通过覆盖列的渲染器来实现可变高度,以在列中的文本长于在列宽的一行中显示时重置行高。
private void adjustRowHeight( )
{
if ( _table == null )
{
return;
}
int cWidth = _table.getTableHeader().getColumnModel().getColumn(_column).getWidth();
_textComponent.setSize( new Dimension( cWidth - 2*HORIZONTAL_GAP, MAX_HEIGHT ) );
int prefH = _textComponent.getPreferredSize().height;
boolean isTooBig = prefH > MAX_HEIGHT;
if (isTooBig)
{
prefH = MAX_HEIGHT;
}
_table.setRowHeight(_row, prefH + 2 );
}
我的scrollToBottom
代码,如下。
在我使行可变高度之前,它引用了行数而不是 MAX_VALUE,但是引用有效的行索引使用默认行高来计算行的位置,而不是可变行高。
_table.scrollRectToVisible( _table.getCellRect( Integer.MAX_VALUE, 0, true ) );
使用 Integer.MAX_VALUE 会覆盖默认计算以使用表格的高度作为矩形的 y 值。我认为正在发生的是,即使新行已添加到表中,在重绘表(并重置高度)之前也会调用此代码。是否有一个事件我可以听以了解何时重置桌子上的高度,然后我可以滚动到底部?还是我在这里缺少其他东西?