2009-04-14 70 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); 
} 

,一切都更新非常漂亮。