gpt4 book ai didi

java - jgoodies 绑定(bind) + 间接更改

转载 作者:行者123 更新时间:2023-11-30 09:58:37 27 4
gpt4 key购买 nike

我在试图理解在我的应用程序中使用 JGoodies 绑定(bind)的适当方式时感到脑筋急转弯。

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

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

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

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

有什么建议吗?

最佳答案

我想通了。

我做这样的事情:

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

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

关于java - jgoodies 绑定(bind) + 间接更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/749470/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com