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

Posted by aterai at 2012-09-10

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

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

  • &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)で変換してから、セル領域を取得している
  • JList
    • JList#ensureIndexIsVisible(int)を使って、追加した最終行を可視化(このメソッド内部でscrollRectToVisibleを使用)
      Rectangle cellBounds = list.getCellBounds(index, index);
      if(cellBounds != null) {
        list.scrollRectToVisible(cellBounds);
      }
      

参考リンク

コメント