2012-07-24 1 views
2

간단한 XML 파일 인 .nfo 파일을 생성하는 간단한 애플리케이션을 개발 중입니다. 그래서이 트 리뷰는 형식 매개 변수를 필요로이TreeView의 마스터 세부 사항

NFO Maker Application

같은 형태의 응용 프로그램을 가지고, 나는 나무에 대한 간단한 모델을 만들었습니다. 이 모델은 XML 모델을 캡슐화합니다. XML 모델은 리프가 아니라 노드입니다.

당신이 속성 왼쪽 트리와 오른쪽에 볼 수있는 사진에서

는 XML (나무 잎)에서 편집 할 내 문제. 나는이 속성 (현재 titleProperty 만)을 바인딩하고 모든 것이 잘 동작합니다. 그러나 텍스트 필드에서 뭔가를 변경하면 TreeView가 업데이트되지 않습니다. TreeItem을 두 번 클릭해야합니다.

편집기 패널의 변경 사항을 반영하도록 TreeView를 업데이트하려면 어떻게해야합니까?

코드는 내가에 updateItem 방법의 TreeCell의 항목이 교체 된 경우에만하지 않을 때 호출되기 때문에 그 생각 GitHub

답변

2

에 수정 됨. TreeCell 인스턴스에 항목의 속성이 변경되었음을 알리는 방법이 필요합니다.

예를 들어, treecell의 텍스트를 수정하기 위해 setText 메소드를 사용하는 대신 textProperty를 모델 객체의 원하는 속성에 바인딩하십시오. 물론 JavaFX 속성 및 바인딩을 사용하기 위해 모델을 업데이트해야합니다. 다른 솔루션은 이전 스타일의 PropertyChangeListener를 사용할 수 있습니다.

예를 원한다면 제공하려고 할 수 있습니다.

EDIT : 약간의 예. 에피소드 잎의 텍스트를 수정했습니다. 물론 EpsiodeDetails 클래스의 에피소드 및 제목 속성을 javafx 스타일 속성으로 이동해야합니다.

@Override 
protected void updateItem(ITVShowItem item, boolean empty) { 
    super.updateItem(item, empty); 
    if (item != null) { 
     if (item instanceof Show) { 
      //nothing 
     } else if (item instanceof Season) { 
      Season season = (Season) item; 
      setText("Season " + season.getSeason()); 
     } else if (item instanceof Episode) { 
      Episode episode = (Episode) item; 
      this.textProperty().bind(Bindings.concat(episode.getDetails().episodeProperty(), " - ", episode.getDetails().titleProperty())); 
      //setText(episode.getDetails().getEpisode() + " - " + episode.getDetails().getTitle()); 
     } 
    } 
} 
+0

Bindings.concat 메서드는 정말 멋지다. 큰 힌트를 가져 주셔서 감사합니다. – Muki

+0

환영합니다 :) – Teocali