【问题标题】:jgoodies bindings + indirect changesjgoodies 绑定 + 间接更改
【发布时间】:2009-04-14 21:36:14
【问题描述】:

我在试图理解在我的应用程序中使用 JGoodies 绑定的适当方法时脑筋急转弯。

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

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

  1. X 包含当前查看的文章。我可以致电X.setArticle()X.getArticle() 更改为不同的文章。没有其他方法可以更改当前查看的文章,我必须通过 X 才能知道我正在更改它。
  2. 设置 JPanel 时,我想使用 X 创建只读 JTextField,这些字段绑定到当前查看文章的各种属性(标题、作者等)
  3. (从 #1 和 #2 开始)任何时候调用 X.setArticle(),文本字段的内容都会自动更新。

我尝试使用 BeanAdapter 从包含在 ValueHolder 中的文章中提取属性模型,并尝试使用 BasicComponentFactory.createTextField() 来创建文本字段,这一切似乎都可以工作除了 com.jgoodies.binding.beans.PropertyUnboundException 抱怨我的 Article 类具有未绑定的属性。呸!我知道,我只是不知道如何找到正确的“管道”来处理它。每个Article 都不可修改,但当前查看的文章可能指向不同的文章。

有什么建议吗?

【问题讨论】:

    标签: java data-binding jgoodies


    【解决方案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"));
    

    稍后,当我更改 Article 对象时,我只是这样做:

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

    屏幕上的所有内容都更新得非常好。

    【讨论】:

    • 非常感谢您发布解决方案!非常有帮助
    猜你喜欢
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    相关资源
    最近更新 更多