Swing/FixedDividerSplitPane の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/FixedDividerSplitPane へ行く。
- Swing/FixedDividerSplitPane の差分を削除
--- 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