TITLE:JScrollPane内にあるJTableなどで追加した行が可視化されるようにスクロールする

Posted by at 2012-09-10

JScrollPane内にあるJTableなどで追加した行が可視化されるようにスクロールする

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

  • &jnlp;
  • &jar;
  • &zip;
ScrollRectToVisible.png

サンプルコード

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 in GitHub: Java, Kotlin

解説

  • `JTable`
    • 追加した行の0列目のセル領域を取得して、`scrollRectToVisible`で可視化
    • ソートやフィルターが使用されている場合を考慮して、追加した行のインデックスを`JTable#convertRowIndexToView(int)`で変換してから、セル領域を取得
Rectangle cellBounds = list.getCellBounds(index, index);
if(cellBounds != null) {
  list.scrollRectToVisible(cellBounds);
}
  • `JTree`
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()));
//*/

参考リンク

コメント