Swing/ScrollRectToVisible のバックアップ差分(No.5)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - 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などで追加した行が可視化されるようにスクロールする #navi(../) #tags(JScrollPane, JViewport, JTable, JList, JTree) RIGHT:Posted by &author(aterai); at 2012-09-10 *JScrollPane内にあるJTableなどで追加した行が可視化されるようにスクロールする [#i0ec10e7] ``JScrollPane``の``JViewport``内にある``JTable``、``JList``、``JTree``で、それぞれ追加された最終行が可視化されるようにスクロールします。 -&jnlp; -&jar; -&zip; //#screenshot #ref(https://lh3.googleusercontent.com/-t_4BD1mGUGk/UE1eF0Ead3I/AAAAAAAABSM/4a4aPSpMDM4/s800/ScrollRectToVisible.png) **サンプルコード [#kcb0b4e6] #code(link){{ 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); }} **解説 [#h5ca79e3] - ``JTable`` -- 追加した行の0列目のセル領域を取得して、``scrollRectToVisible``で可視化 -- ソートやフィルターが使用されている場合を考慮して、追加した行のインデックスを``JTable#convertRowIndexToView(int)``で変換してから、セル領域を取得 - ``JList`` -- [http://docs.oracle.com/javase/jp/6/api/javax/swing/JList.html#ensureIndexIsVisible(int) JList#ensureIndexIsVisible(int)]を使って、追加した最終行を可視化(このメソッド内部で``scrollRectToVisible``を使用) #code{{ Rectangle cellBounds = list.getCellBounds(index, index); if(cellBounds != null) { list.scrollRectToVisible(cellBounds); } }} - ``JTree`` -- [http://docs.oracle.com/javase/jp/6/api/javax/swing/JTree.html#scrollRowToVisible(int) JTree#scrollRowToVisible(int)]、または[http://docs.oracle.com/javase/jp/6/api/javax/swing/JTree.html#scrollPathToVisible(javax.swing.tree.TreePath) JTree#scrollPathToVisible(TreePath)]で追加した最終行を可視化 -- ``tree.scrollRowToVisible(row)``は ``tree.scrollPathToVisible(tree.getPathForRow(row))``と同等 -- ``JTree#scrollPathToVisible(TreePath)``は内部で、``tree.scrollRectToVisible(tree.getPathBounds(path))``を使用 #code{{ 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())); //*/ }} **参考リンク [#pf4abfe7] - [[JScrollPaneのViewPortをマウスで掴んでスクロール>Swing/HandScroll]] - [[JScrollPaneのViewportをマウスで掴んでスクロール>Swing/HandScroll]] -- ``JComponent#scrollRectToVisible(...)``を使用してスクロール - [[JTextPaneで最終行に移動>Swing/CaretPosition]] -- キャレットの移動でスクロール **コメント [#x0728da5] #comment