Home > スポンサー広告 > S2Swingに触れてみました

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Comments:-

Comment Form

Trackback+Pingback:-

TrackBack URL for this entry
http://netforestdevnote.blog26.fc2.com/tb.php/3-2163a7bf
Listed below are links to weblogs that reference
スポンサーサイト from Netforest Developer's Note

Home > スポンサー広告 > S2Swingに触れてみました

Home > Seasar > S2Swingに触れてみました

S2Swingに触れてみました

こんばんは!
チャンです。

3月14日に開催された技術カンファレンス「Seasar Conference 2009 White」に行ってきました。

開催時間は、13時から17時頃までで、いくつかのセッションを受講しました。
そんな中、一番興味が湧いたのは、この講義。

モダンSwing - S2SwingでGUI開発はどう変わるか

友人が開発でSwingを使っていた為、単語が耳に残っていた事と、モダンという響きに
惹かれて参加しました。

開催を待っている間に、みるみる座席が埋まっていき、最終的には立ち見の方が出る
程の盛況ぶりでした。講演者の浜本階生さんによる説明は、笑い話もありつつ、終始
和やかな雰囲気が漂う内容でした。

学んだ内容を以下にまとめたいと思います。


S2Swingは、Swing Application FrameworkBeans Bindingがベースの、Swingによる
開発をサポートする、フレームワークだそうです。

Swing Application Frameworkの提供機能
・外部のプロパティファイルを参照するリソースインジェクション
・リソースファイルをロケールで切り替える国際化対応
・@Actionアノテーションの用意
・SwingWorkerによる非同期処理

Beans Bindingの提供機能

・JavaBeanのプロパティ同期
・データバインディング
・モデル/ロジックとビューの分離

S2Swingの提供機能
・上記、Swing Application FrameworkとBeans Bindingを包含
・@S2Actionアノテーションに、OGNL(Object-Graph Navigation Language)式で、簡単に条件式の記述ができる
・Binderクラスによる、バインディング記述の簡略化
・S2Containerの使用による、AOP機能やJavaBeansのプロパティの取得(イントロスペクション機能)
・PropertyChangeサポートをAOPで自動化し、POJOの双方向バインドに対応している
・アノテーションでから、Beans Binding形式のバリデータ・コンバータを生成する機能
・リソースファイルのカスタマイズが可能

前知識は全く無かったものの、Springでアノテーションに触れた事があったので、
話は理解できた様に思います。


実際に、下記、画面を作成してみました。

action.jpg

挙動は、
・5文字以上のタスク名を入れると「追加」ボタンがアクティブになる。
・5文字以上のタスク名でウインドウタイトル部のメッセージ表示が消える。
・10文字以上のタスク名は、ウインドウタイトル部に警告メッセージが表示される。
・タスクを追加すると、タスク一覧に表示される。
・タスク一覧で、タスクを単一選択した時、「削除」ボタンがアクティブになる。
・「削除」で、タスク一覧から選択項目が消える。

1.画面に表示する部品の用意(入力フィールド、タスク項目、タスク一覧、タスク、追加ボタン、削除ボタン)

private JTextField textField = new JTextField();

private Item item = new Item();

private DefaultListModel listModel = new DefaultListModel();

private JList list = new JList(listModel);

@ActionTarget("save")
private JButton save = new JButton();

@ActionTarget("remove")
private JButton remove = new JButton();

>@ActionTargetアノテーションで、ボタン押下時のアクションを関連付けます。

save.Action.text = 追加
remove.Action.text = 削除

>ボタンの名称は、propertiesファイルに[アクション名].Action.textの書式で設定します。

2.アクションの定義(5文字以上のタスク名を入れると「追加」ボタンがアクティブになる)

action.jpg

public boolean isSaveEnabled()
{
   return this.textField.getText().trim().length() >= 5;
}

@S2Action(enabled = "saveEnabled")
public void save()
{
   listModel.addElement(textField.getText());
}

>@S2Action(enabled = "saveEnabled")アノテーションで、isSaveEnabled()の戻り値がtrueの時だけ、
アクションが実行できる(「追加」ボタンがアクティブ)設定になります。


3.バインディング・バリデーション(10文字以上のタスク名は、ウインドウタイトル部に警告メッセージが表示される)

validation.jpg

public class Item implements Serializable
{
   @Length(max = 10)
   private String name;

   public String getName()
   {
      return name;
   }

   public void setName(String name)
   {
      this.name = name;
   }
}

>モデルクラスのプロパティに、@Lengthアノテーションで制約を設定しました。

item = ObservableBeans.create(Item.class);
Binder b = new Binder();
b.add(item, "name", textField, "text");

binder.addBindingStateListener(new BindingStateListener() {
   public void bindingStateChanged(BindingStateEvent e) {
      setTitle(e.getSimpleErrorMessage());
   }
});

binder.bind();

>ObservableBeans.create()で、モデルクラスのオブジェクトを作成し、Binderクラスで入力フィールドと関連付け変更を監視します
>バインディングの対象のプロパティに変更があると、バリデーションが評価され、成功すれば値が代入されます。バリデーションの結果メッセージは、タイトルに設定しています。課題は、エラーメッセージの出力箇所をコントロールする点です。


name.label = タスク名
name.Length.both.failed = {min}文字以上で、{max}文字は長すぎます。
name.Length.max.failed = {max}文字以上は長すぎます。
name.Length.min.failed = {min}文字以上で

>メッセージのカスタマイズは、propertiesファイル(モデルクラス名.properties)に、記述する事で変更可能です。

4.画面の作成

complete.jpg


Container c = getContentPane();
MigLayout layout = new MigLayout();
c.setLayout(layout);
c.add(new JLabel("タスク名"));
c.add(textField);
c.add(save, "wrap");
c.add(new JLabel("タスク一覧"));
c.add(pane, "span, wrap");
c.add(new JLabel(""));
c.add(remove, "span");

>レイアウトには、講義で聞いた「MigLayout」を使ってみました。


まだ、少しかじった程度ではありますが、モデル/ロジックは、書きやすかった様に思います。
ビューの作成については、出来上がるものがイメージしにくく、まだまだ慣れが必要だと思いました。

ただ、手元で動くものが、サクッと?(結構はまりましたが…)作れるのは、やっぱり楽しいもんだなと
感じました。今回、紹介したプログラムは、記念すべき初作品ですので、もう少しパワーアップさせてやって、自分のタスク管理にでも活用させようと思います。

講演では、「最近、また賑やかになってきています!」と伺ったので、今後の動向にも着目していきたいと思っています。

最後になりましたが、大変興味深い講演をして頂き、浜本さん、ありがとうございました。


以上です。

Comments:0

Comment Form

Trackback+Pingback:0

TrackBack URL for this entry
http://netforestdevnote.blog26.fc2.com/tb.php/3-2163a7bf
Listed below are links to weblogs that reference
S2Swingに触れてみました from Netforest Developer's Note

Home > Seasar > S2Swingに触れてみました

Recent Comments
Recent Trackback
Search
Meta
Links
Feeds

Page Top

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。