jgoodies绑定+间接更改

时间:2009-04-14 21:36:15

标签: java data-binding jgoodies

我正在尝试理解在我的应用程序中使用JGoodies绑定的适当方法。

我有一个类文章,它是一个具有只读属性的bean。 Article是一个“普通”bean,不管理属性侦听器,因为属性永远不会改变。我有一个Swing JPanel,我想用它来显示文章的某些属性。可以在不同时间查看不同的文章对象。

我正在寻找通过一个或多个对象执行以下操作的内容(X):

  1. X包含当前查看的文章。我可以致电X.setArticle()X.getArticle()来更改为其他文章。没有其他方法可以更改当前查看的文章,我必须通过X,因此它知道我正在更改它。
  2. 当我设置我的JPanel时,我想使用X来创建只读JTextFields,这些JTextFields绑定到当前查看文章的各种属性(标题,作者等)。
  3. (从#1和#2开始)无论何时调用X.setArticle(),文本字段的内容都会自动更新。
  4. 我尝试使用BeanAdapter从ValueHolder中包含的文章中提取属性模型,并使用BasicComponentFactory.createTextField()来创建文本字段,这一切似乎都起作用除了我得到的一个com.jgoodies.binding.beans.PropertyUnboundException抱怨我的文章类有未绑定的属性。咄!我知道,我只是无法弄清楚如何获得正确的“管道”来处理它。每个Article都是不可修改的,但当前查看的文章可能指向不同的文章。

    有什么建议吗?

1 个答案:

答案 0 :(得分: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);
 }

并且所有内容都在屏幕上更新。