概要

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を無効化してもこれには影響しない
  • setDividerSize(0)
    • JSplitPane#setDividerSize(0)を実行してDividerを非表示にすることでマウスドラッグによる移動を不可に設定
    • カーソルキー入力による移動などは有効
      • JSplitPane#setFocusable(false)でキー入力は無効になる
    • LookAndFeelに依存し、例えばMotifLookAndFeelではJSplitPane#setDividerSize(0)を実行しても無効でDividerの幅は変化しない
    • Component divider = ((BasicSplitPaneUI) sp.getUI() ).getDivider()Dividerを取得し、setEnabled(false)を実行しても効果が無い

参考リンク

コメント