###前提・実現したいこと
Swingで幾つか業務アプリケーションを開発し、現在JavaFxを勉強しています。
modelとviewをPropertyのbinddirectionalを使用して双方向のbindを以下のように実現する思想に感動しています。
(例)
viewのTextFieldとmodelのIntegerProperty(数量として使用)を、StringConvertを使用して双方向bindする。
しかし、viewのComboBoxのselectedValueItemPropertyとmodelのIntegerProperty(IDとして使用)の双方向bindを実現しようとするにはどのように実装したら良いかご教授いただけませんか?
例えば、ComoBoxは以下のデータクラスをItemClassとして使用しています。
public class BookType {
public Integer id; public String name; public BookType(Integer id, String name) { this.id = id; this.name = name; } @Override public String toString() { return id + name ; }
}
理想は以下のように実装したいのですが、できません。
ComboBox<BookType> combo =new ComboBox<>();
ObservableList<Object> list = FXCollections.observableArrayList();
list.add(new BookType(1, "漫画"));
list.add(new BookType(5, "小説"));
list.add(new BookType(7, "雑誌"));
combo.setItems(list);
SingleSelectionModel<BookType> selectionModel = combo.getSelectionModel();
selectionModel.selectedItemProperty().
bindBidirectional(model.idProperty,new CustomConverter());
理由は、以下の2つだと思っています。
(1)selectedItemPropertyはReadOnlyの為、双方向bindができない。
(2)String以外のObject同士の双方向bindする仕組みがない。
(1)に関しては、リストにないオブジェクトがbindされた時に困るので出来ないのかな?と思っていますが、
(2)に関しては、StringConverterみたいにObjectConverterが何故用意されてないのか歯がゆく思ってます。
リスナーで双方bindを実装するしかないのでしょうか?
皆さんはこういったケースではどのように実装するのしょうか?
また、簡潔に実装できるオープンソースのツール等ご存じないでしょうか?
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/26 12:02
2016/09/26 12:53 編集
2016/09/27 11:41