2

アプリケーションで JGoodies バインディングを使用する適切な方法を理解しようとして頭が痙攣しています。

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

1つ以上のオブジェクトを介して次のことを行う何か(X)を探しています:

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

BeanAdapter を使用して ValueHolder に含まれる Article からプロパティ モデルを抽出し、BasicComponentFactory.createTextField() を使用してテキスト フィールドを作成しようとしましたが、Article クラスにバインドされていないプロパティがあるという不平を言うことを除いて、すべてうまくいくようです。com.jgoodies.binding.beans.PropertyUnboundException当たり前!私はそれを処理するための適切な「配管」を取得する方法がわかりません。それぞれArticleは変更できませんが、現在表示されている記事が別の記事を指している可能性があります。

助言がありますか?

4

1 に答える 1

2

私はそれを考え出した。

私はこのようなことをします:

 // 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"));

後で Article オブジェクトを変更するときは、次のようにします。

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

すべてが画面上で非常にうまく更新されます。

于 2009-04-14T22:34:24.617 に答える