Swing/RightSideRowHeader のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/RightSideRowHeader へ行く。
- 1 (2018-09-10 (月) 16:24:42)
- 2 (2020-09-03 (木) 09:43:00)
- 3 (2022-03-17 (木) 15:22:03)
- 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
概要
JScrollPane
のレイアウトマネージャを使用して、行ヘッダをデフォルトの左側から右側に変更します。
Screenshot
Advertisement
サンプルコード
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);
View in GitHub: Java, Kotlin解説
JScrollPane#setRowHeaderView(...)
で行ヘッダを設定した場合、デフォルト(ComponentOrientation.LEFT_TO_RIGHT
)では左側に配置される- 以下のような設定で行ヘッダを右側に配置可能だが、垂直
JScrollBar
が左側になる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
の幅だけ縮小される
- このため、
- 行ヘッダの位置: