• category: swing folder: OneTouchExpandable title: JSplitPaneのディバイダを展開、収納する tags: [JSplitPane, Divider, ActionMap, ServiceManager, BasicService] author: aterai pubdate: 2010-07-05T01:22:49+09:00 description: JSplitPaneのディバイダをマウスのクリックなどで一気に展開、収納できるように設定します。 image: https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTQl4nQ4PI/AAAAAAAAAf0/y7DMbOexVWs/s800/OneTouchExpandable.png

概要

JSplitPaneのディバイダをマウスのクリックなどで一気に展開、収納できるように設定します。

サンプルコード

JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, s1, s2);
splitPane.setOneTouchExpandable(true);
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、JSplitPane#setOneTouchExpandable(true)を設定するとディバイダにJButtonが表示され、これらをマウスでクリックするとJSplitPaneの展開、収納ができます。

  • Java 1.5以降でJSplitPane#setDividerLocation(0);などとしてディバイダを収納状態にした場合、JSplitPane自体をリサイズすると収納されているコンポーネントの最小サイズ(setMinimumSize)まで展開される
  • 収納状態を維持したい場合、リフレクションを使って、BasicSplitPaneUI#setKeepHidden(true)メソッドを実行したり、Dividerに表示されているJButtonを取得実行する方法がある
  • HOMEキーやENDキー(F8キーなどでDividerにフォーカスを移動した状態で)を押して展開、収納する方法では、Divider中のJButtonを押して展開、収納した場合と動作が異なる
    • HOMEキー、ENDキーで展開、収納
      • 前回の状態に一旦戻らずに展開、収納される
      • JSplitPane自体をリサイズすると、収納されているコンポーネントの最小サイズ(setMinimumSize)まで勝手に展開される
      • JSplitPane#getActionMap()#get("selectMin")などで取得できるActionでは、setKeepHidden(boolean)が使われていない

参考リンク

コメント