JScrollPaneの行ヘッダを右側に変更する
Total: 2737
, Today: 2
, Yesterday: 7
Posted by aterai at
Last-modified:
概要
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
の幅だけ縮小される
- このため
- 行ヘッダの位置: