2009-04-14 2 views
1

내 응용 프로그램에서 JGoodies 바인딩을 사용하는 적절한 방법을 이해하려는 두통이 있습니다.jgoodies bindings + indirect changes

클래스 Article은 읽기 전용 속성을 가진 bean입니다. Article은 "일반"bean이며 속성이 변경되지 않으므로 속성 수신기를 관리하지 않습니다. 기사의 특정 속성을 표시하는 데 사용하고 싶은 스윙 JPanel이 있습니다. 서로 다른 기사 개체를 다른 시간에 볼 수 있습니다.

내가 하나 개 이상의 객체를 통해 다음과 같은 작업을 수행 뭔가 (X)를 찾고 있어요 :

  1. X는 현재보고 제를 포함한다. X.setArticle()X.getArticle()으로 전화하여 다른 기사로 변경할 수 있습니다. 현재 열어 본 기사를 변경할 수있는 다른 방법이 없습니다. X를 통해 변경해야한다는 것을 알고 있어야합니다. 내 인 JPanel을 설정할 때
  2. , 나는 다양한 현재 본 기사의 속성 (제목, 저자 등)
  3. (이 # 1에서 다음에 바인딩 된 읽기 전용 JTextFields을 만들기 위해 X를 사용하려면 # 2) X.setArticle()이 호출 될 때마다, 텍스트 필드의 내용이 자동으로 업데이트됩니다.

은 내가 ValueHolder에 포함 된 조에서 속성 모델을 추출하는 BeanAdapter를 사용하여 시도 및 BasicComponentFactory.createTextField() 텍스트 필드를 생성하고, 모든 내가 얻을 제외 작동하도록 보인다 com.jgoodies.binding.beans.PropertyUnboundException 내 Article 클래스가 언 바운드 속성을 가지고 있다고 불평했다. 이런! 나는 그것을 알고, 나는 그걸 다루기 위해 올바른 "배관 공사 (plumbing)"를 얻는 방법을 알아낼 수 없다. 각 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); 
} 

및 모든 업데이트

나는 이런 일을한다.