2010-08-11 5 views
3

저는 (놀랄만 한) 계층 적 데이터를 표시하는 데 사용하고있는 JTree가 있습니다. 사양의 일부는 사용자가 데이터 소스를 변경할 수 있다는 것입니다 (파일 사이에만 있음). 이제 이런 일이 발생하면 문제없이 데이터와 트리 노드를 다시 작성할 수 있습니다. 그러나, 나는 나무가 변화를 업데이트하는 데 상당히 어려움을 겪고있다. 나는 그것을 scrollpane에서 제거하고 새로운 JTree로 대체하려고 시도했지만, 그런 것을 보지 못했습니다. 나는 JTree에서 모든 것을 제거하려고했지만 아무런 효과가 없다.자바 업데이트 JTree

JTree 화면을 변경 한 후 어떻게 변경합니까?
Ninjedit : 예, updateUI()를 호출했습니다.

다른 편집 : 또한 트리의 현재 데이터를 새 데이터로 바 꾸고 싶었습니다. 그러나, 나는 함께 건설 DefaultMutableTreeNode 걸릴 것입니다 메서드를 참조하십시오. JTree를 삭제하고 updateUI를 호출해도 ScrollPane이 포함되어 있어도 아무 일도 일어나지 않습니다. 또는 내가 다시 페인트를 사용하는 경우.

+0

JTree는 어떻게 작성하고 있습니까? –

+0

노드를 구축 한 다음 노드를 직접 작성하십시오. – Puppy

+1

updateUI()는 룩앤필을 즉시 변경하기위한 것으로 구성 요소를 다시 칠하는 것과 관련이 없습니다. – fasseg

답변

5

적절한 이벤트 (JTree 내부 이벤트)가 발생하지 않을 수 있습니다. 예를 들어 node.add(...) 또는 model.insertNodeInto(...)을 사용하여 노드를 추가 할 수 있습니다 (DefaultTreeModel을 사용한다고 가정). 이 경우는, 뷰 (JTree)를 올바르게 갱신하는 적절한 이벤트를 방아쇠하므로, 후자의 메소드가 바람직합니다. UI를 다시 그리는 것이 아니라 실제로 모델이 변경되었다는 사실을 알리는 것이 문제 일 수 있습니다.
그래서 JTree를 동적으로 수정하는 방법을 살펴보고, 가능하다면 모델로 DefaultTreeModel을 사용하여보기를 유도 할 것을 제안합니다.

그리고 바로 확인하려면 the Sun JTree tutorials을 읽었습니까?

+0

defaultTreeModel에 필요한 모든 기능이 포함되어 있다는 것을 알 수 있습니다. JTree는 그 (것)들을 얻을 어떤 유용한 방법도 제공하지 않았다. 모델에서 JTree를 만들고 모델을 잡았 으면 모든 것이 쉬웠습니다. – Puppy

+0

우수! 그것은 모델 중심으로 돈을 지불합니다. –