概要

JScrollPaneJViewport内にあるJTableJListJTreeで、それぞれ追加された最終行が可視化されるようにスクロールします。

サンプルコード

model.addRow(new Object[] {date.toString(), model.getRowCount(), false});
int i = table.convertRowIndexToView(model.getRowCount() - 1);
Rectangle r = table.getCellRect(i, 0, true);
table.scrollRectToVisible(r);
view all

解説

  • JTable
    • JTable#scrollRectToVisible(Rectangle)を使用して、追加した行の0列目のセル領域までスクロール
    • ソートやフィルタが使用されている場合を考慮して、追加した行のインデックスをJTable#convertRowIndexToView(int)で変換してから、セル領域を取得
Rectangle cellBounds = list.getCellBounds(index, index);
if (cellBounds != null) {
  list.scrollRectToVisible(cellBounds);
}
DefaultTreeModel treeModel = (DefaultTreeModel) tree.getModel();
DefaultMutableTreeNode parent = (DefaultMutableTreeNode) treeModel.getRoot();
DefaultMutableTreeNode newChild = new DefaultMutableTreeNode(date);
treeModel.insertNodeInto(newChild, parent, parent.getChildCount());
/* //tree.scrollRowToVisible(row) == tree.scrollPathToVisible(tree.getPathForRow(row))
tree.scrollRowToVisible(tree.getRowCount() - 1);
/*/
tree.scrollPathToVisible(new TreePath(newChild.getPath()));
//*/

参考リンク

コメント