これは、私が直面している問題の簡単な例です。
私は単純なクラスを持っています:
public class Test{
Integer a;
Integer b;
//getters and setters
public void getC()
{
return a + b;
}
}
a と b の合計である C というプロパティがあることに注意してください。
次に、これを次のように JTable にバインドします。
List<Test> testList = new ArrayList<Test>();
...add some Test objects to the list
ObservableList observableList = ObservableCollections.observableList(testList);
JTable table = new JTable();
JTableBinding tableBinding = SwingBindings.createJTableBinding(AutoBinding.UpdateStrategy.READ_WRITE, observableList, table);
次に、次のコードを使用して、テスト オブジェクトの各プロパティ a、b、および c のバインディングを追加します。(これは私が使用する単なる一般的なコードであることに注意してください)
BeanProperty beanProperty = BeanProperty.create(properyName);
JTableBinding.ColumnBinding columnBinding = tableBinding.addColumnBinding(beanProperty);
columnBinding.setColumnName(columnName);
columnBinding.setColumnClass(clazz);
columnBinding.setEditable(editable);
これでテーブルが正しく表示されますが、テーブルの a または b を更新すると問題が発生します。c は a と b から計算されるため、これらの値のいずれかが変更されたときに c が更新されることを期待しています。これは起こりません。
エンティティの新しい値を反映するには、テーブルを更新する必要があると思いますか?
これを実現するために私が何をする必要があるかを誰かが説明できますか? 追加の Bean バインディング プロパティを追加する必要がありますか?
私が使用しているBeanバインディングライブラリは次のとおりです。
<dependency>
<groupId>org.jdesktop</groupId>
<artifactId>beansbinding</artifactId>
<version>1.2.1</version>
</dependency>
org.jdesktop.swingbinding.SwingBindings