2009-04-14 16 views
1

私のアプリケーションでJGoodiesバインディングを使用する適切な方法を理解しようとしている脳の痙攣があります。jgoodies bindings + indirect changes

私は、読み取り専用のプロパティを持つBeanであるArticleアーティクルを持っています。 Articleは「プレーン」Beanであり、プロパティーは変更されないため、プロパティー・リスナーは管理しません。私は記事の特定のプロパティを表示するために使用したいSwing JPanelを持っています。異なる記事オブジェクトは、異なる時に見ることができる。

私は、1つまたは複数のオブジェクトを通じて、以下のん(X)何かを探しています:

  1. Xは、現在見ている記事が含まれています。 X.setArticle()X.getArticle()に電話して、別の記事に変更することができます。現在閲覧している記事を変更する方法は他にありません。Xを変更する必要があるので、Xを経由しなければなりません。
  2. 私はJPanelをセットアップするときに、Xを使用して、現在表示されている記事(タイトル、著者など)のさまざまなプロパティにバインドされた読み取り専用JTextFieldを作成したいとします。
  3. #2)X.setArticle()が呼び出されるたびに、テキストフィールドの内容が自動的に更新されます。

は私がのValueHolderに含まれる記事からプロパティモデルを抽出するためにBeanAdapterを使用してみましたが、とBasicComponentFactory.createTextFieldは()テキストフィールドを作成し、そしてすべて私が得ること以外を動作するようですcom.jgoodies.binding.beans.PropertyUnboundException Articleクラスにバインドされていないプロパティがあると不平を言っています。ダー!私は知っている、私はちょうどそれに対処するために正しい "配管"を取得する方法を見つけることができません。 Articleは変更不可能ですが、現在表示されている記事は別の記事を指している可能性があります。

提案がありますか?

答えて

1

私はそれを理解しました。非常にうまく画面上

public void showArticle(Article article) 
{ 
    adapter.setBean(article); 
} 

、すべてのアップデート:私はArticleオブジェクトを変更したときに

// on setup: 

BeanAdapter<Article> adapter = new BeanAdapter<Article>((Article)null, 
    false); 
// the "false" in the constructor means don't try to observe property 
// changes within the Article, but we still can observe changes 
// if the Article itself is replaced with a new one. 

JTextField tfAuthors = BasicComponentFactory.createTextField(
    adapter.getValueModel("authors")); 
JTextField tfTitle = BasicComponentFactory.createTextField(
    adapter.getValueModel("title")); 

その後、私はこれを行う:

私はこのような何かを行います。