本文へジャンプ

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

送信されたすべての情報は安全です。

  • 閉じる [x]

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


送信されたすべての情報は安全です。

  • 閉じる [x]

Merlinの魔術: Swingの新たなSpinnerコンポーネント

JSpinner を使用して、ユーザーがピック・リストから素早く日付、数値および選択肢を選べるようにする

John Zukowski (jaz@zukowski.net), President, JZ Ventures, Inc.
Author photo
John Zukowskiは、JZ Ventures, Inc.の戦略的Javaコンサルティングを推進し、数多くのjGuruのコミュニティー主導のJava FAQsで常任指導者として活躍しています。最新の著書には、Apressから出版された「 Java Collections」および「 Definitive Guide to Swing for Java 2」 (第2版) があります。彼のメール・アドレスはjaz@zukowski.net です。

概要: Merlinの魔術 へようこそ。この短編記事シリーズは、みなさんがJava 2 Standard Edition、version1.4を使用してプログラミングをする際の、足掛かりを提供することを意図して企画されました。今後数カ月にわたって、著者のJohnZukowskiが、このリリースで提供されている豊富な新機能を使いこなすヒントや秘けつを提供していきます。今回は、JohnZukowskiはSwingの新たなJSpinner コンポーネントについて述べています。このコンポーネントの使用によって、ピック・リストから日付、数値および選択肢が選べるようになります。

日付:  2001年 7月 01日
レベル:  初級 この記事の原文:  英語
アクティビティー: 2377 ビュー
お気軽にご意見・ご感想をお寄せください: 


Java 2 SDKの最新リリースである1.4 beta版は、2つの強力な新コンポーネントをJFC/Swingのコンポーネント・セットに追加するものです。そのうちの1つであるJSpinner を使用すれば、ユーザーがピック・リストから容易に日付、数値、および選択肢を選べるようになります。(もう1つは、フォーマットされた入力のサポートを行うJFormattedTextField です。)

はじめに

JSpinner を使用すると、図1に示されるように、選択ボックスに1つずつ表示される、値でソートされたリストを作成することができます。ユーザーは、上/ 下の矢印をクリックして選択を行います。


図1. JSpinnerの例
図1

ユーザーは、コンポーネントあるいはキーボード上にある上 / 下の矢印を使用して選択を行います。また、ユーザーは選択項目をタイプ入力することもできます。しかし、JComboBox とは異なり、JSpinner はドロップダウン・リストを提供していないので、選択項目とその順番は分かりやすいものにしてください。

クラスを使用するには、まず選択が行われるエレメントの集合を (List あるいは配列内に) 作成し、次にリストからSpinnerModel を作成し、そのモデルに対するJSpinner を作成するだけでよいのです。


リスト1. 簡単なJSpinnerの使用法
                
  String[] months = new DateFormatSymbols().getMonths();
  SpinnerModel model = new SpinnerListModel(months);
  JSpinner spinner = new JSpinner(model);

目的の入力タイプによって、このコンポーネントについてデータ・モデルを作成するヘルパー・クラスが数種類用意されています。

  • SpinnerDateModel : 日付の入力を読みこむために使用されます。このクラスはCalendar クラスの定数を使用した異なる設定による日付の変更をサポートしています。たとえば、一度に1週間日付を変更するには、Calendar.WEEK_OF_MONTH を使います。
  • SpinnerListModel : 値のリストからの入力を読みこむために使用されます。
  • SpinnerNumberModel : 設定されたステップ・サイズ付きの数値の範囲 (int型あるいはdouble型) からの入力を読みこむために使用されます。

それぞれのSpinnerModel の実装では、エディターを使用して値を入力します。エディターはJComponent でなければなりません。システムで定義されたエディターで、JSpinner.DefaultEditor のサブクラスに属するものです。それぞれのモデルに対して以下の1つが選択可能です。

  • JSpinner.DateEditor SpinnerDateModel のためのエディター。日付の入力フォーマットをカスタマイズすることができます。
  • JSpinner.ListEditor SpinnerListModel のためのエディター。値の位置を特定するために先行入力をサポートします。
  • JSpinner.NumberEditor SpinnerNumberModel のためのエディター。10進法のフォーマット・パターンをカスタマイズすることができます。

図2に示されているのは、このクラス間 (およびプラスアルファ) の関係です。


図2. JSpinner UMLの関係を示すダイアグラム
図2

イベントの操作

JSpinner コンポーネントは、他のSwingコンポーネントと同様に機能します。ユーザーが選択項目を変更するのを捕えたいのであれば、リスナーを接続してください。JSpinner の場合、対応するリスナーはChangeListener であり、これはJSpinner あるいはそのSpinnerModel に直接接続することができます。リスナーは、JSpinnerまたはそのSpinnerModelのいずれにも接続できますが、値が変更された場合のChangeEvent のソースは、常にSpinnerModel です。


リスト2. JSpinnerのイベント・リスニング
                
     ChangeListener listener = new ChangeListener() {
    public void stateChanged(ChangeEvent e) {
      SpinnerModel source = (SpinnerModel)e.getSource();
      System.out.println("The value is: " + source.getValue());
    }
  };
  model.addChangeListener(listener);



完全な例

3つの異なるspinnerモデルのすべてを使用する例を見てみましょう (リスティング3)。このリスト・モデルは、DateFormatSymbols クラスから取得された月の名称のセットを使用します。日付モデルの例では、エディターの入力フォーマットを変更します。(ベータ版には、エディターが変更されてもフィールドの書式を変更しないというバグがあるようです。)また、フィールドに隣接する矢印を使用している場合、日付を1度に1週間分変更します。数値モデルの例では、ユーザーは矢印を使用して、0から100までの数値で5つ刻みの数字を選ぶことができます。ユーザーは、5の倍数に限らず、いかなる数値も入力できることに注意してください。

すべてのコンポーネントに対して、それぞれのspinner値が実際に変更された場合に表示をする、同じ変更リスナーが接続されます。カーソル・キーを使用して月、日、あるいは年を変更する場合、Enterキーを押すまで、値は変わりません。


リスト3. JSpinnerの完全な例
                
import javax.swing.*;
import javax.swing.event.*;
import java.text.*;
import java.awt.*;
import java.util.*;
public class Spinner {
  public static void main (String args[]) throws Exception {
    JFrame frame = new JFrame("Spinner");
    frame.setDefaultCloseOperation(3);
    String[] months = new DateFormatSymbols().getMonths();
    SpinnerModel model = new SpinnerListModel(months);
    JSpinner spinner = new JSpinner(model);
    frame.getContentPane().add(spinner, BorderLayout.NORTH);
    SpinnerDateModel model2 = new SpinnerDateModel();
    model2.setCalendarField(Calendar.WEEK_OF_MONTH);
    JSpinner spinner2 = new JSpinner(model2);
    JSpinner.DateEditor editor2 = new JSpinner.DateEditor(
      spinner2, "MMMMM dd, yyyy");
    spinner2.setEditor(editor2);
    frame.getContentPane().add(spinner2, BorderLayout.SOUTH);
    SpinnerNumberModel model3 = new SpinnerNumberModel(50, 0, 100, 5);
    JSpinner spinner3 = new JSpinner(model3);
    frame.getContentPane().add(spinner3, BorderLayout.CENTER);
    ChangeListener listener = new ChangeListener() {
      public void stateChanged(ChangeEvent e) {
        SpinnerModel source = (SpinnerModel)e.getSource();
        System.out.println("The value is: " + source.getValue());
      }
    };
    model.addChangeListener(listener);
    model2.addChangeListener(listener);
    model3.addChangeListener(listener);
    frame.pack();
    frame.show();
  }
}


参考文献

  • JSpinnerを試しに使ってみてください。本記事で使用したソース・ファイル をダウンロードしてください。

  • 公式リリース1.4のドキュメンテーション「JSpinner -- A Simple Sequence Container」JSpinner コンポーネントのプレビューをお読みください。

  • javadoc を利用して、JSpinnerの使用法を学習してください。

  • javadoc を使用して、JFormattedTextField の使用法を学習してください。

  • Javaリソースについては、developerWorks Javaゾーン を参照してください。

著者について

Author photo

John Zukowskiは、JZ Ventures, Inc.の戦略的Javaコンサルティングを推進し、数多くのjGuruのコミュニティー主導のJava FAQsで常任指導者として活躍しています。最新の著書には、Apressから出版された「 Java Collections」および「 Definitive Guide to Swing for Java 2」 (第2版) があります。彼のメール・アドレスはjaz@zukowski.net です。

不正使用の報告のヘルプ

不正使用の報告

ありがとうございます。 このエントリーは、モデレーターの注目フラグが設定されました。


不正使用の報告のヘルプ

不正使用の報告

不正使用の報告の送信に失敗しました。


developerWorks: サイン・イン


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。 プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。 お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

表示名をお選びください

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

(半角英数字で3文字以上31文字以下にする必要があります)


「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


この記事を評価する

コメント

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Java technology
ArticleID=218829
ArticleTitle=Merlinの魔術: Swingの新たなSpinnerコンポーネント
publish-date=07012001
author1-email=jaz@zukowski.net
author1-email-cc=jaloi@us.ibm.com

タグ

Help
このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。

スライダーバーを使用することで、より多く(少なく)タグを表示します。

人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。

マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。

このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。