Swing の SplitPane の使い方

ウィンドウが複数のペインに分かれているような状況では、通常次のスクリーンショットのようなドラッグ可能なバーが付いていて、 ユーザーが作業領域を調節できることを期待しますよね。

スプリットペインの使い方1
図. 上下の分割

この資料ではこうしたウィンドウ(ペイン)の作り方を説明します。

JSplitPane (javax.swing.JSplitPane) は、画面の領域を上下または左右に分割するコンポーネントです。 画面をペインに分割した後、ユーザーが必要に応じて片側のペイン(ウィンドウの仕切られた領域)を広くしたり、 狭くしたりすることができます。

JSplitPane の使い方

JSplitPane のコンストラクタでは、まず分割の方向を決めます。 上下に分割する場合は JSplitPane.VERTICAL_SPLIT、左右に分割する場合は JSplitPane.HORIZONTAL_SPLIT という値を、 方向としてセットします。

スプリットペインの使い方1
図. 左右の分割

これはコンストラクタでセットできます。(setOrientation メソッドというのもあります)

さらに、コンストラクタに上下または左右に配置するパネル等のコンポーネントを渡せば OK です。

分割バー (ディバイダー、Devider) の初期位置は setDividerLocation で指定します。 左右分割の場合は左からの位置、上下分割の場合は上からの位置を数値で渡します。

さらに片側ペインをすばやく閉じたり開いたりするための機能をディバイダーにもたせるためには、 setOneTouchExpandable メソッドでワンタッチエクスパンダブルという属性を true にします。

        ...
        topPanel, bottomPanel);
        splitPane.setOneTouchExpandable(true);
        splitPane.setDividerLocation(150);
        ...

ディバイダーをワンタッチエクスパンダブルとすると、次のようにディバイダーに矢印が現れます。

スプリットペインの使い方1

スプリットパネルのサンプル

スクリーンショットで示した画面の実装例を示します。

スプリットペインの使い方1
図. 上下の分割

import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.SwingUtilities;

public class SplitPaneTest1 extends JPanel {

  private JSplitPane splitPane;

  public SplitPaneTest1(){
    JPanel topPanel = new JPanel();
    JPanel bottomPanel = new JPanel();

    splitPane = new JSplitPane(
        JSplitPane.VERTICAL_SPLIT,
        topPanel, bottomPanel);
        splitPane.setDividerLocation(150);
        splitPane.setPreferredSize(new Dimension(400,300));
  }

  public JSplitPane getSplitPane() {
    return splitPane;
  }

  public static void main(String[] args){
    SwingUtilities.invokeLater(new Runnable(){
      public void run(){
        createAndShowGUI();
      }
    });
  }

  protected static void createAndShowGUI() {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    SplitPaneTest1 splitPaneTest1 = new SplitPaneTest1();
    frame.getContentPane().add(splitPaneTest1.getSplitPane());
    frame.pack();
    frame.setVisible(true);
  }
}

ここではスプリットペインの定義とテストプログラムの定義を同じクラス SplitPaneTest1 内で行っています。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Java 入門