TITLE:JSplitPaneのディバイダを展開、収納する

Posted by terai at 2010-07-05

JSplitPaneのディバイダを展開、収納する

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

  • &jnlp;
  • &jar;
  • &zip;

#screenshot

サンプルコード

JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, s1, s2);
splitPane.setOneTouchExpandable(true);

解説

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


初期状態でディバイダを収納状態にする場合、Java 1.5以降では、splitPane.setDividerLocation(0);などとするだけではダメ*1で、以下のような設定をする必要があります。

  • Web Startで起動した場合
    • dividerから直接JButton(名前がついていない……)を取得し実行
      EventQueue.invokeLater(new Runnable() {
        @Override public void run() {
          Container divider = ((BasicSplitPaneUI)splitPane.getUI()).getDivider();
          for(Component c: divider.getComponents()) {
            if(c instanceof JButton) {
              ((JButton)c).doClick();
              break;
            }
          }
        }
      });
      

HOMEキーやENDキー(F8キーなどでdividerにフォーカスを移動した状態で)を押して展開、収納する方法では、divider中のJButtonを押して展開、収納した場合と動作が異なります。

  • HOMEキー、ENDキーで展開、収納
    • 前回の状態に一旦戻らずに展開、収納される
    • JSplitPane自体をリサイズすると、収納されているコンポーネントの最小サイズ(setMinimumSize)まで勝手に展開される
      • JSplitPane#getActionMap()#get("selectMin")などで取得できるActionでは、setKeepHidden(boolean)が使われていない

参考リンク

コメント