Swing/SynchronizedScrollingTables のバックアップ(No.11)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/SynchronizedScrollingTables へ行く。
- 1 (2012-11-12 (月) 02:37:41)
- 2 (2012-11-15 (木) 16:24:54)
- 3 (2012-12-07 (金) 16:34:19)
- 4 (2012-12-25 (火) 18:11:18)
- 5 (2013-01-28 (月) 02:14:24)
- 6 (2015-06-26 (金) 17:45:18)
- 7 (2017-03-22 (水) 20:49:16)
- 8 (2018-01-24 (水) 17:44:37)
- 9 (2018-07-25 (水) 20:26:29)
- 10 (2018-08-30 (木) 18:07:06)
- 11 (2020-08-30 (日) 20:07:32)
- 12 (2022-02-25 (金) 15:13:05)
- category: swing folder: SynchronizedScrollingTables title: JSplitPaneに2つのJTableを配置してスクロールを同期する tags: [JTable, JScrollPane, JScrollBar, JSplitPane] author: aterai pubdate: 2012-11-12T02:37:41+09:00 description: JSplitPaneの左右に、JTableをそれぞれ配置し、スクロールや追加などが同期するようにモデルを共有します。 image:
概要
JSplitPane
の左右に、JTable
をそれぞれ配置し、スクロールや追加などが同期するようにモデルを共有します。
Screenshot
Advertisement
サンプルコード
JScrollPane scroll1 = new JScrollPane(leftTable);
//scroll1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
scroll1.setVerticalScrollBar(new JScrollBar(Adjustable.VERTICAL) {
@Override public Dimension getPreferredSize() {
Dimension dim = super.getPreferredSize();
return new Dimension(0, dim.height);
}
});
JScrollPane scroll2 = new JScrollPane(table);
scroll2.getVerticalScrollBar().setModel(scroll1.getVerticalScrollBar().getModel());
View in GitHub: Java, Kotlin解説
JTable
TableModel
を共有し、JTable#removeColumn()
でそれぞれのJTable
で非表示にする列を指定- 左右の
JTable
でRowSorter
とSelectionModel
を共有
JScrollPane
- それぞれ内部に配置する
JTable
の高さは、常に同じになるので、VerticalScrollBar
のBoundedRangeModel
を共有
- それぞれ内部に配置する
- 制限
- 例えば左
JTable
のセルを選択して行選択を開始した場合、右JTable
上でのドラッグには反応しない
- 例えば左
参考リンク
- JTableの列固定とソート
ChangeListener
を使用、1
つのJScrollPane
に、JTable
を2
つ配置
- JScrollPaneのスクロールを同期
ChangeListener
を使用
- 2つのJTableを同時にスクロール - argius note
AdjustmentListener
が使用されている