JSplitPaneのDividerをマウスで移動できないように設定する
Total: 3893
, Today: 1
, Yesterday: 0
Posted by aterai at
Last-modified:
概要
JSplitPane
のDivider
をマウスやキー入力などで移動不可になるように設定します。
Screenshot
Advertisement
サンプルコード
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)
を実行しても効果が無い
参考リンク
- JSplitPane (Java Platform SE 8)
- java - JSplitPane set resizable false - Stack Overflow
- [JDK-4797982] Setting negative size of JSplitPane divider leads to unexpected results. - Java Bug System
- [JDK-5021949] JSplitPane setEnabled(false) shouldn't be partially functional - Java Bug System