Swing/SwappingSplitPane の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/SwappingSplitPane へ行く。
- Swing/SwappingSplitPane の差分を削除
---
category: swing
folder: SwappingSplitPane
title: JSplitPaneに設定した子コンポーネントの位置を入れ替える
tags: [JSplitPane]
author: aterai
pubdate: 2019-01-21T00:29:34+09:00
description: JSplitPaneに設定した子コンポーネントの位置と余分なスペースの配分率を入れ替えます。
image: https://drive.google.com/uc?id=1TMNOHO7KVS63zeFEW4xasYw5TX-ZNqTL9w
hreflang:
href: https://java-swing-tips.blogspot.com/2019/01/swap-position-of-child-components-in.html
lang: en
---
* Summary [#summary]
`JSplitPane`に設定した子コンポーネントの位置と余分なスペースの配分率を入れ替えます。
#download(https://drive.google.com/uc?id=1TMNOHO7KVS63zeFEW4xasYw5TX-ZNqTL9w)
* Source Code Examples [#sourcecode]
#code(link){{
JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, left, right);
split.setResizeWeight(.4);
JButton button = new JButton("swap");
button.setFocusable(false);
button.addActionListener(e -> {
Component left = split.getLeftComponent();
Component right = split.getRightComponent();
// split.removeAll(); // Divider is also removed
split.remove(left);
split.remove(right);
// or:
// split.setLeftComponent(null);
// split.setRightComponent(null);
split.setLeftComponent(right);
split.setRightComponent(left);
split.setResizeWeight(1d - split.getResizeWeight());
if (check.isSelected()) {
split.setDividerLocation(split.getDividerLocation());
}
});
}}
* Description [#description]
上記のサンプルでは、水平分割した`JSplitPane`の左右に配置したコンポーネントを入れ替え可能に設定しています。
- すでに`JSplitPane`に配置されているコンポーネントを別の位置に配置すると例外が発生するため、一旦`JSplitPane`から削除する必要がある
- `JSplitPane#removeAll()`を使用するとディバイダも削除されてしまう
- `JSplitPane#remove(Component)`、または`JSplitPane#setLeftComponent(null)`などで削除する
- ディバイダの位置を入れ替え前と同じ場所に保つ場合、`JSplitPane#setResizeWeight(...)`メソッドで余分なスペースの配分率の入れ替えと`JSplitPane#setDividerLocation(...)`メソッドで位置の再設定が必要になる
----
- `GridLayout`を設定した`JPanel`などの場合、以下のように`Container#setComponentZOrder(...)`メソッドでコンポーネントの位置の入れ替えが可能
-- サンプルコードは[[JPanelに追加したコンポーネントの順序を変更する>Swing/ComponentZOrder]]に移動
* Reference [#reference]
- [https://stackoverflow.com/questions/4871874/java-problem-with-jsplitpane swing - java: Problem with JSplitpane - Stack Overflow]
- [[JPanelに追加したコンポーネントの順序を変更する>Swing/ComponentZOrder]]
- [https://bugs.openjdk.org/browse/JDK-8365886 [JDK-8365886] JSplitPane loses track of the left component when the component orientation is changed - Java Bug System]
* Comment [#comment]
#comment
#comment