Swing/SynchronizedScrollingTables のバックアップの現在との差分(No.1)
TITLE:JSplitPaneに2つのJTableを配置してスクロールを同期する
Posted by aterai at 2012-11-12
JSplitPaneに2つのJTableを配置してスクロールを同期する
JSplitPaneの左右に、JTableをそれぞれ配置し、スクロールや追加などが同期するようにモデルを共有します。- 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
をそれぞれ配置し、スクロールや追加などが同期するようにモデルを共有します。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
サンプルコード
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
JScrollPane scroll1 = new JScrollPane(leftTable);
#spandel
//scroll1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
#spanend
#spandel
scroll1.setVerticalScrollBar(new JScrollBar(JScrollBar.VERTICAL) {
#spanend
#spanadd
// scroll1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
#spanend
#spanadd
scroll1.setVerticalScrollBar(new JScrollBar(Adjustable.VERTICAL) {
#spanend
@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());
解説
- JTable
- TableModelを共有し、JTable#removeColumn()で、それぞれで非表示にする列を指定
- 左右でRowSorter、SelectionModelを共有
- JScrollPane
- それぞれ内部に配置するJTableの高さは、常に同じになるので、VerticalScrollBarのBoundedRangeModelを共有
解説
-
JTable
-
TableModel
を共有しJTable#removeColumn(...)
メソッドでそれぞれのJTable
で非表示にする列を指定 - 左右の
JTable
でRowSorter
とSelectionModel
を共有
-
-
JScrollPane
- それぞれ内部に配置する
JTable
の高さは常に同じになるのでVerticalScrollBar
のBoundedRangeModel
を共有
- それぞれ内部に配置する
- 制限
- 例えば左
JTable
のセルを選択して行選択を開始した場合、右JTable
上でのドラッグには反応しない
- 例えば左
参考リンク
参考リンク
- JTableの列固定とソート
- ChangeListener を使用
- 2つのJTableを同時にスクロール - argius note
- AdjustmentListener を使用
-
ChangeListener
を使用し1
つのJScrollPane
にJTable
を2
つ配置
- JScrollPaneのスクロールを同期
-
ChangeListener
を使用
-
- 2つのJTableを同時にスクロール - argius note
-
AdjustmentListener
が使用されている
-