次の問題があります。
ビュー内の JCombobox をモデル 'DomainModel' にバインドして、後で 'AnotherModel'.getModel(); で取得できるようにします。
「ID - 名前」のように見えるように、独自の CellRenderer を作成しました。しかし、コンボボックスの値を選択して 'AnotherModel'.getModel を呼び出すと、値が保存されません。
複雑なデータ型を JGoodies バインディングでバインドすることはできませんか? String では問題なく動作しますが、「DomainModel」のオブジェクトをバインドしたい
簡略化されたコードは次のとおりです。
景色:
public class View extends JPanel {
private JComboBox<DomainModel> cmbValueModel;
public View(AntotherModel antotherModel, List<DomainModel> manyDomainModels) {
PresentationModel<DomainModel> domainModel = new PresentationModel<DomainModel>();
domainModel.setBean(antotherModel.getModel());
cmbValueModel = BasicComponentFactory.createComboBox(new SelectionInList<DomainModel>(manyDomainModels, domainModel.getModel(DomainModel.PROPERTYNAME_NAME)));
Bindings.bind(cmbValueModel, new SelectionInList<>(), "");
cmbValueModel.setRenderer(new DefaultListCellRenderer(){
@Override
public Component getListCellRendererComponent(JList<?> list,
Object value, int index, boolean isSelected,
boolean cellHasFocus) {
return super.getListCellRendererComponent(list, value == null ? null : ((DomainModel)value).getId() + " - " + ((DomainModel)value).getName() , index, isSelected,
cellHasFocus);
}
});
}
}
ドメイン:
public class DomainModel extends Model{
public static final String PROPERTYNAME_NAME = "name";
@GeneratedValue
private int id;
private String name;
public void setName(String name) {
String oldVal = this.name;
this.name = name;
changeSupport.firePropertyChange(PROPERTYNAME_NAME, oldVal, name);
}
public String getName(){
return name;
}
public int getId(){
return id;
}
}
別のモデル:
public class AntotherModel extends Model{
public static final String PROPERTYNAME_MODEL = "model";
private int id;
private DomainModel model;
public int getId() {
return id;
}
public DomainModel getModel() {
return model;
}
public void setId(int id) {
this.id = id;
}
public void setModel(DomainModel model) {
DomainModel oldVal = this.model;
this.model = model;
changeSupport.firePropertyChange(PROPERTYNAME_MODEL, oldVal, model);
}
}