---
category: swing
folder: RightSideRowHeader
title: JScrollPaneの行ヘッダを右側に変更する
tags: [JScrollPane, JScrollBar, JTable, ScrollPaneLayout, LayoutManager]
author: aterai
pubdate: 2018-09-10T16:22:14+09:00
description: JScrollPaneのレイアウトマネージャを使用して、行ヘッダをデフォルトの左側から右側に変更します。
image: https://drive.google.com/uc?id=1va-Vod9bidZfMkBZEMw6jIu8TQWjxNk5Mg
---
* 概要 [#summary]
`JScrollPane`のレイアウトマネージャを使用して、行ヘッダをデフォルトの左側から右側に変更します。

#download(https://drive.google.com/uc?id=1va-Vod9bidZfMkBZEMw6jIu8TQWjxNk5Mg)

* サンプルコード [#sourcecode]
#code(link){{
class RightFixedScrollPaneLayout extends ScrollPaneLayout {
  @Override public void layoutContainer(Container parent) {
    // ...
    // if (leftToRight) {
    //   rowHeadR.x = availR.x;
    //   availR.x += rowHeadWidth;
    // } else {
    //   rowHeadR.x = availR.x + availR.width;
    // }
    rowHeadR.x = availR.x + availR.width;
    // ...

    // adjustForVSB(vsbNeeded, availR, vsbR, vpbInsets, leftToRight);
    adjustForVSB(vsbNeeded, rowHeadR, vsbR, vpbInsets, leftToRight);
}}

* 解説 [#explanation]
- `JScrollPane#setRowHeaderView(...)`で行ヘッダを設定した場合、デフォルト(`ComponentOrientation.LEFT_TO_RIGHT`)では左側に配置される
-- 以下のような設定で行ヘッダを右側に配置可能だが垂直`JScrollBar`が左側になる
#code{{
table.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
scroll.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
scroll.setCorner(ScrollPaneConstants.UPPER_RIGHT_CORNER, fixedTable.getTableHeader());
}}
- `ScrollPaneLayout#layoutContainer(...)`メソッドをオーバーライドして行ヘッダや垂直`JScrollBar`の位置を直接変更する
-- 行ヘッダの位置: `ComponentOrientation.RIGHT_TO_LEFT`が設定されている場合と同じになるよう修正
-- 垂直`JScrollBar`の位置: `adjustForVSB(...)`メソッドの引数に`JViewport`ではなく行ヘッダの`Rectangle`を渡すよう修正
--- このため、`JViewport`の右側ではなく行ヘッダの右側に垂直`JScrollBar`が配置され、`JViewport`の幅ではなく行ヘッダの幅が垂直`JScrollBar`の幅だけ縮小される
--- このため`JViewport`の右側ではなく行ヘッダの右側に垂直`JScrollBar`が配置され、`JViewport`の幅ではなく行ヘッダの幅が垂直`JScrollBar`の幅だけ縮小される

* 参考リンク [#reference]
- [[JTableに行ヘッダを追加>Swing/TableRowHeader]]
- [[JTableの列固定とソート>Swing/FixedColumnTableSorting]]
- [[JSplitPaneに2つのJTableを配置してスクロールを同期する>Swing/SynchronizedScrollingTables]]

* コメント [#comment]
#comment
#comment