• category: swing folder: FixedDividerSplitPane title: JSplitPaneのDividerをマウスで移動できないように設定する tags: [JSplitPane, Divider] author: aterai pubdate: 2017-09-04T15:18:48+09:00 description: JSplitPaneのDividerをマウスやキー入力などで移動不可になるように設定します。 image: https://drive.google.com/uc?export=view&id=1eHpxPFoB6tM1nQoTdo1jYb29F6W2IyIwyw

概要

JSplitPaneDividerをマウスやキー入力などで移動不可になるように設定します。

サンプルコード

JSplitPane sp = new JSplitPane(...);
sp.setOneTouchExpandable(true);

JCheckBox check1 = new JCheckBox("setEnabled(...)", true);
check1.addActionListener(e -> sp.setEnabled(check1.isSelected()));

int dividerSize = UIManager.getInt("SplitPane.dividerSize");
JCheckBox check2 = new JCheckBox("setDividerSize(0)");
check2.addActionListener(e -> sp.setDividerSize(check2.isSelected() ? 0 : dividerSize));
View in GitHub: Java, Kotlin

解説

  • setEnabled(...)
    • JSplitPane#setEnabled(false)を実行して無効化し、マウスやキー入力によるDividerの移動を不可に設定
    • JSplitPaneを無効化しても、内部のコンポーネントには影響しない
    • JSplitPaneを無効化しても、OneTouchボタンは無効化されない
    • JFrameのリサイズなどでJSplitPane自体のサイズが変化したとき、ResizeWeightの値によってDividerが移動する場合があるが、JSplitPaneを無効化してもこれには影響しない
  • JSplitPane#setDividerSize(0)を実行してDividerを非表示にし、マウスでの移動を不可に設定
    • カーソルキー入力による移動などは有効
      • JSplitPane#setFocusable(false)でキー入力は無効になる
    • LookAndFeelに依存し、例えばMotifLookAndFeelではJSplitPane#setDividerSize(0)を実行しても無効でDividerの幅は変化しない
  • メモ
    • Component divider = ((BasicSplitPaneUI) sp.getUI() ).getDivider();Dividerを取得し、setEnabled(false)を実行しても効果が無い

参考リンク

コメント