2009-04-14 75 views
1

我有一個腦痙攣試圖瞭解在我的應用程序中使用JGoodies綁定的適當方式。jgoodies綁定+間接更改

我有一個類文章,它是一個只讀屬性的bean。 Article是一個「普通」bean,並且不管理屬性偵聽器,因爲屬性不會改變。我有一個Swing JPanel,我想用它來顯示文章的某些屬性。不同的物品可能會在不同的時間被觀看。

我在尋找其執行以下操作通過一個或多個對象的東西(X):

  1. X包含當前查看的文章。我可以撥打X.setArticle()X.getArticle()更改爲其他文章。沒有其他的方式來改變當前看到的文章,我必須通過X,所以它知道我正在改變它。
  2. 當我建立我的JPanel時,我想使用X來創建綁定到當前查看文章(標題,作者等)的各種屬性的只讀JTextFields
  3. (這來自#1和#2)任何時候調用X.setArticle(),文本字段的內容都會自動更新。

我一直在使用BeanAdapter則從中提取包含在一個而ValueHolder條的屬性模型審理,BasicComponentFactory.createTextField()創建的文本字段,而這一切似乎工作除了,我得到一個com.jgoodies.binding.beans.PropertyUnboundException抱怨我的文章類沒有綁定的屬性。咄!我知道,我無法弄清楚如何找到正確的「管道」來處理它。每個Article都是不可修改的,但是當前查看的文章可能指向不同的文章。

有什麼建議嗎?

回答

1

我想通了。

我做這樣的事情:

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

後來,當我改文章對象,我只是這樣做:在屏幕上

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

,一切都更新非常漂亮。