---
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?id=1eHpxPFoB6tM1nQoTdo1jYb29F6W2IyIwyw
---
* 概要 [#summary]
`JSplitPane`の`Divider`をマウスやキー入力などで移動不可になるように設定します。

#download(https://drive.google.com/uc?id=1eHpxPFoB6tM1nQoTdo1jYb29F6W2IyIwyw)

* サンプルコード [#sourcecode]
#code(link){{
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));
}}

* 解説 [#explanation]
- `setEnabled(...)`
-- `JSplitPane#setEnabled(false)`を実行して無効化し、マウスやキー入力による`Divider`の移動を不可に設定
-- `JSplitPane`を無効化しても内部のコンポーネントには影響しない
-- `JSplitPane`を無効化しても`OneTouch`ボタンは無効化されない
--- [https://bugs.openjdk.org/browse/JDK-5021949 [JDK-5021949] JSplitPane setEnabled(false) shouldn't be partially functional - Java Bug System]
-- `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)`を実行しても効果が無い

* 参考リンク [#reference]
- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JSplitPane.html JSplitPane (Java Platform SE 8)]
- [https://stackoverflow.com/questions/7065309/jsplitpane-set-resizable-false java - JSplitPane set resizable false - Stack Overflow]
- [https://bugs.openjdk.org/browse/JDK-4797982 [JDK-4797982] Setting negative size of JSplitPane divider leads to unexpected results. - Java Bug System]
- [https://bugs.openjdk.org/browse/JDK-5021949 [JDK-5021949] JSplitPane setEnabled(false) shouldn't be partially functional - Java Bug System]

* コメント [#comment]
#comment
#comment