Summary
JScrollPaneのJViewport内にあるJTable、JList、JTreeでそれぞれ追加された最終行が可視化されるようにスクロールします。
Screenshot

Advertisement
Source Code Examples
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, KotlinDescription
JTableJTable#scrollRectToVisible(Rectangle)を使用して追加した行の0列目のセル領域までスクロール- ソートやフィルタが使用されている場合を考慮して追加した行のインデックスを
JTable#convertRowIndexToView(int)で変換してからセル領域を取得
JList- JList#ensureIndexIsVisible(int)を使用して追加した最終行を可視化(このメソッド内部で
scrollRectToVisibleを使用)Rectangle cellBounds = list.getCellBounds(index, index); if (cellBounds != null) { list.scrollRectToVisible(cellBounds); }
- JList#ensureIndexIsVisible(int)を使用して追加した最終行を可視化(このメソッド内部で
JTree- JTree#scrollRowToVisible(int)、またはJTree#scrollPathToVisible(TreePath)で追加した最終行を可視化
tree.scrollRowToVisible(row)はtree.scrollPathToVisible(tree.getPathForRow(row))と同等JTree#scrollPathToVisible(TreePath)は内部でtree.scrollRectToVisible(tree.getPathBounds(path))を使用している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())); //*/
Reference
- JScrollPaneのViewportをマウスで掴んでスクロール
JComponent#scrollRectToVisible(...)を使用してスクロール
- JTextPaneで最終行に移動
- キャレットの移動でスクロール