我試圖自動滾動到具有可變行高度並定期刷新的JTable(在scrollPane內)的底部。是否有一個我可以覆蓋的偵聽器,或者是一個我可以聽的事件,這個事件會在表格被底部的新行重新繪製後發生?Jtable-滾動到可變高度行的底部
我通過覆蓋列的渲染器來實現變量高度,如果列中的文本長度超過可以在列寬度的一行中顯示的行重置行高度。
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?還是有什麼我在這裏失蹤?
_implemented變量高度通過重寫列的渲染器來重置行height_ - 取決於_when_渲染器這樣做,它可能是非常錯誤的:它*不能*在getTableCellRendererComponent中執行它 – kleopatra