Swing の SplitPane の使い方
ウィンドウが複数のペインに分かれているような状況では、通常次のスクリーンショットのようなドラッグ可能なバーが付いていて、 ユーザーが作業領域を調節できることを期待しますよね。
図. 上下の分割
この資料ではこうしたウィンドウ(ペイン)の作り方を説明します。
JSplitPane (javax.swing.JSplitPane) は、画面の領域を上下または左右に分割するコンポーネントです。 画面をペインに分割した後、ユーザーが必要に応じて片側のペイン(ウィンドウの仕切られた領域)を広くしたり、 狭くしたりすることができます。
JSplitPane の使い方
JSplitPane のコンストラクタでは、まず分割の方向を決めます。 上下に分割する場合は JSplitPane.VERTICAL_SPLIT、左右に分割する場合は JSplitPane.HORIZONTAL_SPLIT という値を、 方向としてセットします。
図. 左右の分割
これはコンストラクタでセットできます。(setOrientation メソッドというのもあります)
さらに、コンストラクタに上下または左右に配置するパネル等のコンポーネントを渡せば OK です。
分割バー (ディバイダー、Devider) の初期位置は setDividerLocation で指定します。 左右分割の場合は左からの位置、上下分割の場合は上からの位置を数値で渡します。
さらに片側ペインをすばやく閉じたり開いたりするための機能をディバイダーにもたせるためには、 setOneTouchExpandable メソッドでワンタッチエクスパンダブルという属性を true にします。
...
topPanel, bottomPanel);
splitPane.setOneTouchExpandable(true);
splitPane.setDividerLocation(150);
...
ディバイダーをワンタッチエクスパンダブルとすると、次のようにディバイダーに矢印が現れます。
スプリットパネルのサンプル
スクリーンショットで示した画面の実装例を示します。
図. 上下の分割
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 内で行っています。