43
Swingをもっと手軽に S2Swingの紹介 浜本 階生 Seasar Conference 2008 Autumn

S2Swing - Seasar Conference 2008 Autumn

Embed Size (px)

Citation preview

Page 1: S2Swing - Seasar Conference 2008 Autumn

Swingをもっと手軽に

S2Swingの紹介浜本 階生

Seasar Conference 2008 Autumn

Page 2: S2Swing - Seasar Conference 2008 Autumn

浜本 階生(はまもと かいせい)id:kaiseh

http://d.hatena.ne.jp/kaiseh/

Page 3: S2Swing - Seasar Conference 2008 Autumn

レストラン検索サイトEatSpothttp://eatspot.jp/

Page 4: S2Swing - Seasar Conference 2008 Autumn

レストラン検索サイトEatSpothttp://eatspot.jp/

はてなーランキングTopHatenarhttp://tophatenar.com/

Page 5: S2Swing - Seasar Conference 2008 Autumn

レストラン検索サイトEatSpothttp://eatspot.jp/

はてなーランキングTopHatenarhttp://tophatenar.com/

はてな村勢力地図HatenarMapshttp://hatenarmaps.com/

Page 6: S2Swing - Seasar Conference 2008 Autumn

MayaaCubbyS2JDBC

Page 7: S2Swing - Seasar Conference 2008 Autumn

Swing

Page 8: S2Swing - Seasar Conference 2008 Autumn

Swing Application Framework+

Beans Binding

Page 9: S2Swing - Seasar Conference 2008 Autumn

Swing Application Framework+

Beans Binding

Page 10: S2Swing - Seasar Conference 2008 Autumn

アクション

Page 11: S2Swing - Seasar Conference 2008 Autumn

@Actionpublic void open() { ...}

Page 12: S2Swing - Seasar Conference 2008 Autumn

リソースインジェクション

Page 13: S2Swing - Seasar Conference 2008 Autumn

open.Action.text = 開く(&O)...

open.Action.text = &Open...

DocumentEditorView_ja.properties

DocumentEditorView_en.properties

Page 14: S2Swing - Seasar Conference 2008 Autumn

非同期処理

Page 15: S2Swing - Seasar Conference 2008 Autumn
Page 16: S2Swing - Seasar Conference 2008 Autumn

Swing Application Framework+

Beans Binding

Page 17: S2Swing - Seasar Conference 2008 Autumn
Page 18: S2Swing - Seasar Conference 2008 Autumn

ViewJComponent

ModelPOJO

Page 19: S2Swing - Seasar Conference 2008 Autumn

ViewJComponent setSelectedItem()

ModelPOJO

addChang

eListener

()

addListSelectionListener()

setText()

addActionListener()

setSelectedItem()

addActionListener()

addChangeListener()

addChangeListener()

addChangeListener()addListSelection

Listener()

addListSelectionListener()addListSelectionListener()

Page 20: S2Swing - Seasar Conference 2008 Autumn

ViewJComponent

ModelPOJO

Beans Binding

Page 21: S2Swing - Seasar Conference 2008 Autumn

S2Swing

Page 22: S2Swing - Seasar Conference 2008 Autumn

S2ContainerSwing

Swing Application Framework

Beans Binding

S2Swing

User Application

Page 23: S2Swing - Seasar Conference 2008 Autumn

S2ContainerSwing

Swing Application Framework

Beans Binding

S2Swing

User Application

Page 24: S2Swing - Seasar Conference 2008 Autumn

バリデーションの強化コンバータの強化アクションの強化PropertyChange (by S2AOP)コンポーネントビルダメニュービルダ

Page 25: S2Swing - Seasar Conference 2008 Autumn

public class Book { private String isbn; // ISBN private String name; // 書名 private int price; // 価格

// getters and setters}

Page 26: S2Swing - Seasar Conference 2008 Autumn
Page 27: S2Swing - Seasar Conference 2008 Autumn

『Bookオブジェクトと画面を同期せよ』

Page 28: S2Swing - Seasar Conference 2008 Autumn

Book book = ObservableBeans.create( Book.class);

Binder binder = new Binder();binder.add(book, ”isbn”, isbnText, ”text”);binder.add(book, ”name”, nameText, ”text”);binder.add(book, ”price”, priceText, ”text”);

binder.bind();

おまじない

Model View

Page 29: S2Swing - Seasar Conference 2008 Autumn

book.setIsbn(”978-4774135663”);book.setName(”サーバ/インフラを支える技術”);book.setPrice(2919);

Page 30: S2Swing - Seasar Conference 2008 Autumn

『ISBNの書式チェック』『書名は必須(100文字まで)』

『価格は0円以上』『リアルタイムでエラー表示せよ』

Page 31: S2Swing - Seasar Conference 2008 Autumn

public class Book { private String isbn;

private String name;

private int price;

...}

public class Book { @Pattern(”[0-9X\\-]+”) private String isbn;

@Required @Length(max = 100) private String name;

@IntRange(min = 0) private int price;

...}

Page 32: S2Swing - Seasar Conference 2008 Autumn

public void bindingStateChanged( BindingStateEvent e) { errorLabel.setText( e.getSimpleErrorMessage());}

Page 33: S2Swing - Seasar Conference 2008 Autumn
Page 34: S2Swing - Seasar Conference 2008 Autumn

『入力の余分な空白は 除去せよ』

『価格を通貨形式で入力 できるようにせよ』

Page 35: S2Swing - Seasar Conference 2008 Autumn

public class Book { private String isbn;

private String name;

private int price;

...}

public class Book { private String isbn;

private String name;

private int price;

...}

public class Book { @Trim private String isbn;

@Trim private String name;

@NumberToString(type = NumberFormatType.CURRENCY) private int price;

...}

Page 36: S2Swing - Seasar Conference 2008 Autumn

『入力エラーがないときだけ OKボタンをクリック可能にせよ』

Page 37: S2Swing - Seasar Conference 2008 Autumn

private boolean bookValid;

public void bindingStateChanged( BindingStateEvent e) { errorLabel.setText( e.getSimpleErrorMessage(); bookValid = e.isValid();}

Page 38: S2Swing - Seasar Conference 2008 Autumn

@S2Action(enabled = ”bookValid”)public void ok() { // ...}

Page 39: S2Swing - Seasar Conference 2008 Autumn
Page 40: S2Swing - Seasar Conference 2008 Autumn
Page 41: S2Swing - Seasar Conference 2008 Autumn
Page 42: S2Swing - Seasar Conference 2008 Autumn

本日リリース近

Page 43: S2Swing - Seasar Conference 2008 Autumn

http://s2swing.sandbox.seasar.org/

http://d.hatena.ne.jp/kaiseh/