Swing/RightSideRowHeader のバックアップ(No.7)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/RightSideRowHeader へ行く。
- 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のレイアウトマネージャを使用して、行ヘッダをデフォルトの左側から右側に変更します。
Screenshot

Advertisement
Source Code Examples
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, KotlinExplanation
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の幅だけ縮小される
- このため
- 行ヘッダの位置: