行の高さが可変で定期的に更新されるJTableの一番下(scrollPane内)に自動的にスクロールしようとしています。オーバーライドできるリスナー、またはリッスンできるイベントはありますか?それは、テーブルが下部に新しい行で再描画された後に発生しますか?
列のレンダラーをオーバーライドして、列のテキストが列の幅で1行に表示できるよりも長い場合に行の高さをリセットすることで、可変の高さを実装しました。
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値として使用されます。新しい行がテーブルに追加されていても、テーブルが再描画される(および高さがリセットされる)前に、このコードが呼び出されていると思います。テーブルの高さがリセットされたことを知るために聞くことができるイベントがありますか?それで、scrollToBottomを実行できますか?それとも私がここで見逃している何かがありますか?