2009-04-14 5 views
1

У меня судороги мозга, пытаясь понять, как использовать JGoodies в моем приложении.jgoodies bindings + косвенные изменения

У меня есть класс Article, который является компонентом, который имеет свойства только для чтения. Article - это «простой» компонент и не управляет слушателями свойств, поскольку свойства никогда не меняются. У меня есть 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 жалуясь, что мой класс статьи имеет несвязанные свойства. Duh! Я знаю это, я просто не могу понять, как получить правильную «сантехнику», чтобы справиться с ней. Каждый 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); 
} 

и все, обновления на экране очень красиво.