Swing/ScrollRectToVisible のバックアップ(No.7)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ScrollRectToVisible へ行く。
- 1 (2012-09-10 (月) 16:06:04)
- 2 (2012-12-07 (金) 16:47:55)
- 3 (2012-12-25 (火) 18:18:19)
- 4 (2012-12-25 (火) 23:18:45)
- 5 (2013-08-16 (金) 16:33:35)
- 6 (2014-06-12 (木) 21:32:48)
- 7 (2014-11-05 (水) 05:06:05)
- 8 (2015-12-04 (金) 18:10:08)
- 9 (2017-05-31 (水) 20:13:05)
- 10 (2018-02-22 (木) 14:04:45)
- 11 (2020-01-31 (金) 15:07:11)
- 12 (2021-07-28 (水) 05:12:40)
- title: JScrollPane内にあるJTableなどで追加した行が可視化されるようにスクロールする tags: [JScrollPane, JViewport, JTable, JList, JTree] author: aterai pubdate: 2012-09-10T16:06:04+09:00 description: JScrollPaneのJViewport内にあるJTable、JList、JTreeで、それぞれ追加された最終行が可視化されるようにスクロールします。
概要
JScrollPane
のJViewport
内にあるJTable
、JList
、JTree
で、それぞれ追加された最終行が可視化されるようにスクロールします。
Screenshot
Advertisement
サンプルコード
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)
で変換してから、セル領域を取得
- 追加した行の
JList
- JList#ensureIndexIsVisible(int)を使って、追加した最終行を可視化(このメソッド内部で
scrollRectToVisible
を使用)
- JList#ensureIndexIsVisible(int)を使って、追加した最終行を可視化(このメソッド内部で
Rectangle cellBounds = list.getCellBounds(index, index);
if(cellBounds != null) {
list.scrollRectToVisible(cellBounds);
}
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()));
//*/
参考リンク
- JScrollPaneのViewportをマウスで掴んでスクロール
JComponent#scrollRectToVisible(...)
を使用してスクロール
- JTextPaneで最終行に移動
- キャレットの移動でスクロール