JSplitPaneに設定した子コンポーネントの位置を入れ替える
Total: 2577
, Today: 1
, Yesterday: 2
Posted by aterai at
Last-modified:
概要
JSplitPane
に設定した子コンポーネントの位置と余分なスペースの配分率を入れ替えます。
Screenshot
Advertisement
サンプルコード
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());
}
});
View in GitHub: Java, Kotlin解説
上記のサンプルでは、水平分割したJSplitPane
の左右に配置したコンポーネントを入れ替え可能に設定しています。
- すでに
JSplitPane
に配置されているコンポーネントを別の位置に配置すると例外が発生するため、一旦JSplitPane
から削除する必要がある JSplitPane#removeAll()
を使用するとディバイダも削除されてしまうJSplitPane#remove(Component)
、またはJSplitPane#setLeftComponent(null)
などで削除する- ディバイダの位置を入れ替え前と同じ場所に保つ場合、
JSplitPane#setResizeWeight(...)
メソッドで余分なスペースの配分率の入れ替えとJSplitPane#setDividerLocation(...)
メソッドで位置の再設定が必要になる
GridLayout
を設定したJPanel
などの場合、以下のようにContainer#setComponentZOrder(...)
メソッドでコンポーネントの位置の入れ替えが可能- サンプルコードはJPanelに追加したコンポーネントの順序を変更するに移動