前回から、もう一つのSwingであるSwingXプロジェクトについて紹介しています。

 簡単におさらいすると、SwingXプロジェクトはSwing Labsプロジェクトのサブプロジェクトとして活動を行っているプロジェクトで、Swingコンポーネントの拡張や、独自コンポーネントなどを提供しています。

 前回は、独自コンポーネントのJXBusyLabelを紹介しました。今回は引き続きSwingXプロジェクトの独自コンポーネントを紹介していきます。

 今回紹介するコンポーネントは以下の3種類です。

  • JXTaskPane
  • JXMultiSplitPane
  • JXLoginPane

 これらのクラスはいずれもorg.jdesktop.swingxパッケージで定義されています。

JXTaskPane

 JXTaskPaneは、Flash Platformなどではアコーディオンと呼ばれているコンポーネントです。通常は折りたたまれており、タイトル部分をクリックすることで下に展開されて内容を参照できます。

 JXTaskPaneクラスは折りたまれる一つのペインを表します。そして、JXTaskPaneクラス専用のコンテナがJXTaskPaneContainerクラスです。

 では、実際に使ってみましょう。

サンプルのソース (ダウンロードできます)
TaskPaneDemo.java

 まずはJXTaskPaneContainerオブジェクトに、JXTaskPaneオブジェクトを貼ってみます。

リスト●
public class TaskPaneDemo {
    public TaskPaneDemo() {
 
        JFrame frame = new JFrame("TaskPane Demo");
        frame.setSize(200, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        JScrollPane pane = new JScrollPane(createTaskPane());
        frame.add(pane);
 
        frame.setVisible(true);
    }
 
    @SuppressWarnings("deprecation")
    private JXTaskPaneContainer createTaskPane() {
        // タスクペインを貼るためのコンテナ
        JXTaskPaneContainer container =new JXTaskPaneContainer();
 
        // タスクペインを生成し、
        // アクションをタスクペインに貼る
        JXTaskPane pane1 = new JXTaskPane("File");
 
        // タスクペインをコンテナに貼る
        container.add(pane1);
 
        JXTaskPane pane2 = new JXTaskPane("Option");
        container.add(pane2);
 
        return container;
    }
 
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new TaskPaneDemo();
            }
        });
    }
}

 タスクペインを作成しているのがcreateTaskPaneメソッドです。

 はじめに、コンテナであるJXTaskPaneContainerオブジェクトを生成します。オレンジで示したようにデフォルトコンストラクタを使用して、オブジェクトを生成します。

 次にJXTaskPaneオブジェクトを生成します(赤字部分)。コンストラクタの引数である文字列がタスクペインのタイトルとして表示されます。ここではFileとOptionという二つのタスクペインを生成しています。

 また、ここでは使用していませんが、アイコンを表示することも可能です。

 次に、生成したJXTaskPaneオブジェクトを、addメソッドを使用してJXTaskPaneContainerオブジェクトに貼るだけです(青字部分)。

 なお、createTaskPaneメソッドを@SuppressWarningsアノテーションで修飾しているのは、JXTaskPaneContainerクラスのaddメソッドが非推奨のためです。

 JXTaskPaneContainerクラスはJXTaskPaneクラスを引数に取るaddメソッドを定義していました。しかしJXTaskPaneContainerクラスのスーパークラスであるjava.awt.Containerクラスにはjava.awt.Componentクラスを引数に使用するaddメソッドが定義されています。

 一般的にはContainerクラスのaddメソッドを使用するので、JXTaskPaneContainerクラスもそれにならい、JXTaskPaneクラスを引数に取るaddメソッドは非推奨になりました。

 もちろん、@SuppressWarningsアノテーションを使わずに、JXTaskPaneオブジェクトをConponentクラスにキャストする方法でも、警告を抑制することができます。

 では、コンパイル、実行してみましょう。

 前回説明したように、SwingXプロジェクトのコンポーネントを使用するにはクラスパスにswingx-core-X.jarファイルを追加します(Xはバージョンを示します。原稿執筆時点でのバージョンは1.6.2です)。

 実行結果を図1図2に示します。

 図1が初期状態でタスクペインが展開されている状態です。Fileのタイトル部分をクリックして折りたたんだ状態にしたのが、図2です。

図1●TaskPaneDemoの実行結果
図1●TaskPaneDemoの実行結果
図2●Fileペインを閉じた場合
図2●Fileペインを閉じた場合

 実際に実行させてみればわかりますが、タスクペインの展開や閉じる動作はアニメーション化されており、スムーズに動作します。