Swing/SynchronizedScrollingTables のバックアップの現在との差分(No.5)
- バックアップ一覧
- 差分 を表示
- 現在との差分 - 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)
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:JSplitPaneに2つのJTableを配置してスクロールを同期する #navi(../) #tags(JTable, JScrollPane, JScrollBar, JSplitPane) RIGHT:Posted by &author(aterai); at 2012-11-12 *JSplitPaneに2つのJTableを配置してスクロールを同期する [#i455f67c] ``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: https://lh4.googleusercontent.com/-mAnvPJlUJSI/UJ_bYI_kJsI/AAAAAAAABWo/a_jdyUqFLwM/s800/SynchronizedScrollingTables.png --- * 概要 [#summary] `JSplitPane`の左右に、`JTable`をそれぞれ配置し、スクロールや追加などが同期するようにモデルを共有します。 -&jnlp; -&jar; -&zip; #download(https://lh4.googleusercontent.com/-mAnvPJlUJSI/UJ_bYI_kJsI/AAAAAAAABWo/a_jdyUqFLwM/s800/SynchronizedScrollingTables.png) //#screenshot #ref(https://lh4.googleusercontent.com/-mAnvPJlUJSI/UJ_bYI_kJsI/AAAAAAAABWo/a_jdyUqFLwM/s800/SynchronizedScrollingTables.png) **サンプルコード [#s244a26b] * サンプルコード [#sourcecode] #code(link){{ JScrollPane scroll1 = new JScrollPane(leftTable); //scroll1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER); scroll1.setVerticalScrollBar(new JScrollBar(JScrollBar.VERTICAL) { // 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()); }} **解説 [#d56365ac] - ``JTable`` -- ``TableModel``を共有し、``JTable#removeColumn()``で、それぞれで非表示にする列を指定 -- 左右で``RowSorter``、``SelectionModel``を共有 - ``JScrollPane`` -- それぞれ内部に配置する``JTable``の高さは、常に同じになるので、``VerticalScrollBar``の``BoundedRangeModel``を共有 * 解説 [#explanation] - `JTable` -- `TableModel`を共有し`JTable#removeColumn(...)`メソッドでそれぞれの`JTable`で非表示にする列を指定 -- 左右の`JTable`で`RowSorter`と`SelectionModel`を共有 - `JScrollPane` -- それぞれ内部に配置する`JTable`の高さは常に同じになるので`VerticalScrollBar`の`BoundedRangeModel`を共有 - 制限 -- 例えば左`JTable`のセルを選択して行選択を開始した場合、右`JTable`上でのドラッグには反応しない **参考リンク [#g8d15937] * 参考リンク [#reference] - [[JTableの列固定とソート>Swing/FixedColumnTableSorting]] -- ``ChangeListener``を使用、1つの``JScrollPane``に、``JTable``を2つ配置 -- `ChangeListener`を使用し`1`つの`JScrollPane`に`JTable`を`2`つ配置 - [[JScrollPaneのスクロールを同期>Swing/SynchronizedScroll]] -- ``ChangeListener``を使用 - [http://d.hatena.ne.jp/argius/20080325/1206454660 2つのJTableを同時にスクロール - argius note] -- ``AdjustmentListener``を使用 -- `ChangeListener`を使用 - [http://argius.hatenablog.jp/entry/20080325/1206454660 2つのJTableを同時にスクロール - argius note] -- `AdjustmentListener`が使用されている **コメント [#qe8b0ef4] * コメント [#comment] #comment #comment