java tree 예제

추가된 모든 노드는 트리에 포함되어야 합니다. 예를 들어, 4명의 플레이어 간에 플레이되는 체스 토너먼트의 트리 .는 다음과 같이 표시됩니다. 그러나 왼쪽 서브 트리의 승자는 오른쪽 서브 트리의 승자와 대결합니다. 앞그림에서 볼 수 있듯이 JTree는 데이터를 세로로 표시합니다. 트리에 의해 표시되는 각 행에는 노드라고 하는 정확히 하나의 데이터 항목이 포함되어 있습니다. 모든 트리에는 모든 노드가 내려오는 루트 노드가 있습니다. 기본적으로 트리는 루트 노드를 표시하지만 그렇지 않으면 명령할 수 있습니다. 노드에는 자식이 있거나 포함되지 않을 수 있습니다. 현재 자식이 분기 노드로 있는지 여부에 관계없이 자식이 있을 수 있는 노드를 참조합니다. 자식이 없는 노드는 리프 노드입니다. 다음은 노드 아래의 모든 리프 노드를 삭제하는 간단한 구현입니다. 또한 이 섹션에서는 https://github.com/t-tak/javagists/tree/master/simple-java-tree 여기에 코드를 게시하여 깊이 우선 및 너비 우선 검색을 자세히 다루면서 트리를 통과하는 다양한 방법을 살펴보겠습니다.

예를 들어 이전 코드 조각에서 사용된 BookInfo 클래스는 책 이름과 책을 설명하는 HTML 파일의 URL이라는 두 가지 데이터를 포함하는 사용자 지정 클래스입니다. toString 메서드는 책 이름을 반환 하기 위해 구현 됩니다. 따라서 BookInfo 개체와 연결된 각 노드에는 책 이름이 표시됩니다. 이러한 종류의 순회는 수준 순서라고도 하며 루트에서 왼쪽에서 오른쪽으로 시작하는 트리의 모든 수준을 방문합니다. 다음은 응용 프로그램의 그림이며, 그 중 위쪽 절반은 스크롤 창에 트리를 표시합니다. 분기 노드에는 자식 수가 많을 수 있습니다. 일반적으로 사용자는 분기 노드를 확장및 축소하여 자식이 표시하거나 보이지 않게 만들 수 있습니다. 기본적으로 루트 노드를 제외한 모든 분기 노드가 축소되어 시작됩니다. 프로그램은 트리 확장 수신기 작성 방법 및 트리-확장 리스너 작성 방법에 설명된 대로 트리 확장 또는 트리 확장 이벤트를 수신 대기하여 분기 노드의 확장 상태의 변화를 감지할 수 있습니다. 코드는 노드를 만들고 트리 모델에 삽입한 다음, 적절한 경우 노드를 확장하고 트리를 스크롤하여 새 노드가 표시되도록 요청합니다.

모델에 노드를 삽입하려면 코드는 DefaultTreeModel 클래스에서 제공하는 insertNodeInto 메서드를 사용합니다. 트리의 자식을 느리게 로드할 수 있는 방법 중 하나는 TreeWillExpandListener 인터페이스를 사용하는 것입니다. 예를 들어 다음 코드에 표시된 대로 응용 프로그램과 함께 트리의 루트, 조부모 및 부모를 선언하고 로드할 수 있습니다. 사용자가 노드 편집을 완료하면 모델은 JTree를 포함한 모든 수신기에 트리 노드가 변경되었음을 알리는 트리 모델 이벤트를 생성합니다. DefaultMutableTreeNode에는 노드의 콘텐츠를 변경하는 메서드가 있지만 변경 사항은 DefaultTreeModel 표지 메서드를 거쳐야 합니다. 그렇지 않으면 트리 모델 이벤트가 생성되지 않으며 트리와 같은 수신기는 업데이트에 대해 알지 못합니다.