자바 jtree 예제

다음은 Java, Windows 및 Mac OS가 구현을 보고 느끼는 일부 트리 노드의 그림입니다. 루트 노드는 계층 구조에서 최상위입니다. 그러나 경우에 따라 루트 노드표시가 필요하지 않을 수 있습니다. 예를 들어` 루트 텍스트와 함께 표시 된 루트 노드를 사용 했습니다. 이것은 매우 유용하지 않습니다. 그래서, 우리가 그것을 숨기고 싶다면? 이는 간단한 API 호출로 가능합니다. 트리가 각 노드를 페인트할 때 JTree나 해당 모양 및 느낌 별 구현에는 실제로 노드를 그리는 코드가 포함되어 있지 않습니다. 대신 트리는 셀 렌더러의 페인팅 코드를 사용하여 노드를 페인팅합니다. 예를 들어 “Java 프로그래밍 언어”문자열이 있는 리프 노드를 페인트하려면 트리에서 해당 문자열로 리프 노드를 페인트할 수 있는 구성 요소를 반환하도록 셀 렌더러에 요청합니다. 셀 렌더러가 DefaultTreeCellRenderer인 경우 기본 리프 아이콘뒤에 문자열을 그리는 레이블을 반환합니다.

나머지 클래스는 마지막 예제의 클래스와 동일합니다. 다음 스냅숏은 Java 모양과 느낌을 사용할 때 JTree.lineStyle 속성을 설정한 결과를 보여 줍니다. 모양과 느낌에 관계없이 노드에 의해 표시되는 기본 아이콘은 노드가 리프인지 여부와 확장 여부에 따라 결정됩니다. 예를 들어 Windows 및 Motif 모양 및 느낌 구현에서 각 리프 노드의 기본 아이콘은 점입니다. Java 모양과 느낌에서 기본 리프 아이콘은 종이모양의 기호입니다. 우리가 보여 준 모든 모양과 느낌 구현에서 분기 노드는 폴더와 같은 기호로 표시됩니다. 일부 모양과 느낌은 축소된 분기와 확장된 분기에 대해 서로 다른 아이콘을 가질 수 있습니다. 흥미롭게도 TreeModel 인터페이스는 모든 종류의 개체를 트리 노드로 허용합니다. 노드를 DefaultMutableTreeNode 개체로 표시하거나 해당 노드가 TreeNode 인터페이스를 구현할 필요가 없습니다. 따라서 TreeNode 인터페이스가 트리 모델에 적합하지 않은 경우 트리 노드에 대한 고유한 표현을 고안해 보십시오. 예를 들어 기존 계층 적 데이터 구조가 있는 경우 이를 복제하거나 TreeNode 금형에 강제로 넣을 필요가 없습니다. 기존 데이터 구조의 정보를 사용하도록 트리 모델을 구현하기만 하면 됩니다.

노드 변경 사항에 대한 알림을 위해 TreeModelListener를 구현할 수 있습니다. 다음은 사용자가 트리 노드의 새 이름을 입력한 시기를 감지하는 트리 모델 리스너의 예입니다. 이렇게 하려면 먼저 DefaultTreeCellRenderer의 인스턴스를 만듭니다. 언제든지 원하는 구성 요소를 다시 사용하여 처음부터 고유한 TreeCellRenderer 구현을 만들 수 있습니다. 다음으로 렌더러에서 다음 방법 중 하나 이상을 호출하여 사용할 아이콘을 지정합니다: setLeafIcon(리프 노드용), setOpenIcon(확장된 분기 노드의 경우), setClosedIcon(축소된 분기 노드의 경우). 트리에 노드 유형에 대한 아이콘이 표시되지 않으려면 아이콘에 대해 null을 지정합니다. 아이콘을 설정한 후에는 트리의 setCellRenderer 메서드를 사용하여 DefaultTreeCellRenderer가 해당 노드를 페인트하도록 지정합니다. 다음은 TreeIconDemo.java에서 가져온 예입니다: 예를 들어 이전 코드 스니펫에 사용된 BookInfo 클래스는 책 이름과 책을 설명하는 HTML 파일의 URL이라는 두 가지 데이터를 포함하는 사용자 지정 클래스입니다. toString 메서드는 책 이름을 반환 하기 위해 구현 됩니다. 따라서 BookInfo 개체와 연결된 각 노드에는 책 이름이 표시됩니다. 트리 모델은 트리 모델 리스너를 추가 및 제거하는 메서드를 구현해야 하며 트리의 구조 또는 데이터가 변경될 때 해당 수신기에 TreeModelEvents를 실행해야 합니다.

예를 들어 사용자가 계보를 지시할 때예제를 조상 표시에서 하위 항목 표시로 전환하도록 트리 모델이 변경한 다음 이벤트를 발생하여 해당 수신기(예: 트리 구성 요소)를 알려줍니다. 이 문서에서는 JTree작업에 대해 설명하고 몇 가지 예제를 보여 드리겠습니다.