Swing/ScrollRectToVisible のバックアップの現在との差分(No.1)
TITLE:JScrollPane内にあるJTableなどで追加した行が可視化されるようにスクロールする
Posted by aterai at 2012-09-10
JScrollPane内にあるJTableなどで追加した行が可視化されるようにスクロールする
JScrollPaneのJViewport内にあるJTable、JList、JTreeで、それぞれ追加された最終行が可視化されるようにスクロールします。- category: swing folder: ScrollRectToVisible 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でそれぞれ追加された最終行が可視化されるようにスクロールします。 image:
概要
JScrollPane
のJViewport
内にあるJTable
、JList
、JTree
でそれぞれ追加された最終行が可視化されるようにスクロールします。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
サンプルコード
サンプルコード
model.addRow(new Object[] {date.toString(), model.getRowCount(), false});
#spandel
int i = table.convertRowIndexToView(model.getRowCount()-1);
#spanend
#spanadd
int i = table.convertRowIndexToView(model.getRowCount() - 1);
#spanend
Rectangle r = table.getCellRect(i, 0, true);
table.scrollRectToVisible(r);
View in GitHub: Java, Kotlin解説
- JTable
- 追加した行の0列目のセル領域を取得して、scrollRectToVisibleで可視化
- ソートやフィルターが使用されている場合を考慮して、追加した行のインデックスをJTable#convertRowIndexToView(int)で変換してから、セル領域を取得している
解説
-
JTable
-
JTable#scrollRectToVisible(Rectangle)
を使用して追加した行の0
列目のセル領域までスクロール - ソートやフィルタが使用されている場合を考慮して追加した行のインデックスを
JTable#convertRowIndexToView(int)
で変換してからセル領域を取得
-
- JList
- JList#ensureIndexIsVisible(int)を使って、追加した最終行を可視化(このメソッド内部でscrollRectToVisibleを使用)
-
JList
- JList#ensureIndexIsVisible(int)を使用して追加した最終行を可視化(このメソッド内部で
scrollRectToVisible
を使用)Rectangle cellBounds = list.getCellBounds(index, index); #spandel if(cellBounds != null) { #spanend #spanadd if (cellBounds != null) { #spanend 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))を使用
-
JTree
- JTree#scrollRowToVisible(int)、またはJTree#scrollPathToVisible(TreePath)で追加した最終行を可視化
-
tree.scrollRowToVisible(row)
はtree.scrollPathToVisible(tree.getPathForRow(row))
と同等 -
JTree#scrollPathToVisible(TreePath)
は内部でtree.scrollRectToVisible(tree.getPathBounds(path))
を使用している#spanend #spanadd DefaultTreeModel treeModel = (DefaultTreeModel) tree.getModel(); #spanend #spanadd DefaultMutableTreeNode parent = (DefaultMutableTreeNode) treeModel.getRoot(); #spanend #spanadd DefaultMutableTreeNode newChild = new DefaultMutableTreeNode(date); #spanend #spanadd treeModel.insertNodeInto(newChild, parent, parent.getChildCount()); #spanend #spanadd /* // tree.scrollRowToVisible(row) == tree.scrollPathToVisible(tree.getPathForRow(row)) #spanend #spanadd tree.scrollRowToVisible(tree.getRowCount() - 1); #spanend #spanadd /*/ #spanend #spanadd tree.scrollPathToVisible(new TreePath(newChild.getPath())); #spanend #spanadd //*/ #spanend #spanadd
参考リンク
- JScrollPaneのViewPortをマウスで掴んでスクロール
- JComponent#scrollRectToVisible(...)を使用してスクロール
参考リンク
- JScrollPaneのViewportをマウスで掴んでスクロール
-
JComponent#scrollRectToVisible(...)
を使用してスクロール
-
- JTextPaneで最終行に移動
- キャレットの移動でスクロール