TreeModelEvent — 트리 모델 변경 이벤트

TreeModelEvent — 트리 모델 변경 이벤트

TreeModelEvent는 트리 모델의 변경을 설명하는 정보를 담아 트리 모델 리스너에게 알리는 데 사용하는 이벤트입니다.

출처: Java API Reference

본문

public class TreeModelEvent extends EventObject

트리 모델의 변경을 설명하는 정보를 캡슐화하며, 변경을 트리 모델 리스너에게 알리는 데 사용합니다. 자세한 내용과 예제는 The Java Tutorial의 "How to Write a Tree Model Listener" 섹션을 참고하세요. 이 클래스의 직렬화된 객체는 향후 Swing 버전과 호환되지 않을 수 있습니다. 현재 직렬화 지원은 단기 저장이나 같은 버전의 Swing을 실행하는 애플리케이션 간 RMI에 적합합니다. 1.4부터 모든 JavaBean의 장기 저장 지원이 java.beans 패키지에 추가되었으니 XMLEncoder를 참고하세요.

path

protected TreePath path

변경된 노드들의 부모까지의 경로입니다.

childIndices

protected int[] childIndices

자식들이 있던 위치를 식별하는 인덱스 배열입니다.

children

protected Object[] children

제거된 자식들입니다.

TreeModelEvent

public TreeModelEvent(Object source, Object[] path, int[] childIndices, Object[] children)

노드가 변경·삽입·제거되었을 때 이벤트를 생성하는 데 사용하며, 수정된 항목들의 부모까지의 경로를 Object 배열로 식별합니다. 수정된 모든 객체는 지정된 부모의 직계 자손(손자 아님)인 형제입니다. 삽입·삭제·변경이 발생한 위치는 int 배열로 지정합니다. 그 배열의 인덱스는 낮은 것부터 높은 것 순서여야 합니다. 변경의 경우 모델의 인덱스는 UI에 현재 표시된 항목의 인덱스와 정확히 일치합니다. 따라서 인덱스가 정확한 순서가 아니어도 크게 중요하지 않습니다. 그러나 여러 삽입·삭제 후에는 UI의 항목이 더는 모델의 항목과 일치하지 않습니다. 그러므로 삽입·삭제의 경우 인덱스를 제대로 지정하는 것이 중요합니다. 삽입의 경우 인덱스는 삽입이 발생한 후의 트리 최종 상태를 나타냅니다. 인덱스를 순서대로 지정해야 하므로 가장 자연스러운 처리 방법은 가장 낮은 인덱스부터 시작해 높은 인덱스로 작업하는 것입니다. 진행하면서 삽입 위치를 지정하는 Integer 객체 Vector를 누적한 다음 Vector를 int 배열로 변환해 이벤트를 만듭니다. 위치 인덱스가 0이면 노드는 목록의 시작에 삽입됩니다. 위치 인덱스가 목록 크기와 같으면 노드는 목록 끝에 '삽입'(추가)됩니다. 삭제의 경우 인덱스는 삭제가 발생하기 전의 트리 초기 상태를 나타냅니다. 인덱스를 순서대로 지정해야 하므로 delete-counter를 사용하는 것이 가장 자연스럽습니다. 카운터를 0으로 초기화하고 낮은 인덱스부터 높은 인덱스로 목록을 작업합니다. 삭제할 때마다 delete-counter의 현재 값을 삭제가 발생한 인덱스 위치에 더하고, 결과를 addElement()로 delete-locations Vector에 추가합니다. 그런 다음 delete-counter를 증가시킵니다. 따라서 Vector에 저장된 인덱스 위치는 이전 삭제들의 영향을 모두 반영하므로 각 객체의 초기 트리에서의 위치를 나타냅니다. (가장 높은 인덱스에서 시작해 낮은 인덱스로 작업하며 insertElementAt(Integer, 0)로 delete-locations Vector를 누적할 수도 있습니다.) 어느 방식으로 초기 위치 Vector를 만들든, 생성된 뒤에는 Integer 객체 Vector를 int 배열로 변환해 이벤트를 만들어야 합니다. 참고: DefaultTreeModel 클래스의 insertNodeInto 메서드처럼, insertElementAt은 인덱스가 Vector의 크기와 일치하면 Vector에 추가합니다. 따라서 Vector가 비어 있어도 insertElementAt(Integer, 0)을 쓸 수 있습니다. 루트 노드에 대한 노드 변경 이벤트를 만들려면 부모와 자식 인덱스를 null로 지정하세요.

  • 매개변수: source - 이벤트를 생성하는 책임이 있는 Object(보통 이벤트 객체를 만든 사람이 this를 넘깁니다)
  • 매개변수: path - 수정된 항목의 부모까지의 경로를 식별하는 Object 배열. 배열의 첫 요소는 루트 노드에 저장된 Object이고 마지막 요소는 부모 노드에 저장된 Object입니다
  • 매개변수: childIndices - 제거된 항목의 인덱스 값을 지정하는 int 배열. 인덱스는 낮은 것부터 높은 것 순서로 정렬되어야 합니다
  • 매개변수: children - 삽입·제거·변경된 객체를 담은 Object 배열

TreeModelEvent

public TreeModelEvent(Object source, TreePath path, int[] childIndices, Object[] children)

노드가 변경·삽입·제거되었을 때 이벤트를 생성하는 데 사용하며, 수정된 항목의 부모까지의 경로를 TreePath 객체로 식별합니다. 인덱스와 객체 지정 방법에 대한 자세한 내용은 TreeModelEvent(Object,Object[],int[],Object[])를 참고하세요.

  • 매개변수: source - 이벤트를 생성하는 책임이 있는 Object(보통 이벤트 객체를 만든 사람이 this를 넘깁니다)
  • 매개변수: path - 수정된 항목의 부모까지의 경로를 식별하는 TreePath 객체
  • 매개변수: childIndices - 수정된 항목의 인덱스 값을 지정하는 int 배열
  • 매개변수: children - 삽입·제거·변경된 객체를 담은 Object 배열

TreeModelEvent

public TreeModelEvent(Object source, Object[] path)

노드 구조가 어떤 방식으로든 변경되었을 때 이벤트를 생성하는 데 사용하며, 수정된 하위 트리의 루트까지의 경로를 Object 배열로 식별합니다. 구조 변경 이벤트는 예를 들어 노드가 위치를 바꾸는 경우나, 노드에서 뻗어 나온 하위 트리의 여러 수준에서 서로 다른 변경이 일어난 다중 삽입·삭제를 캡슐화할 수 있습니다. 참고: JTree는 지정된 노드 아래의 모든 노드를 축소하여 직계 자식만 보이게 합니다.

  • 매개변수: source - 이벤트를 생성하는 책임이 있는 Object(보통 이벤트 객체를 만든 사람이 this를 넘깁니다)
  • 매개변수: path - 수정된 하위 트리의 루트까지의 경로를 식별하는 Object 배열. 배열의 첫 요소는 루트 노드에 저장된 객체이고 마지막 요소는 변경된 노드에 저장된 객체입니다

TreeModelEvent

public TreeModelEvent(Object source, TreePath path)

노드 구조가 어떤 방식으로든 변경되었을 때 이벤트를 생성하는 데 사용하며, 수정된 하위 트리의 루트까지의 경로를 TreePath 객체로 식별합니다. 이 이벤트 지정에 대한 자세한 내용은 TreeModelEvent(Object,Object[])를 참고하세요.

  • 매개변수: source - 이벤트를 생성하는 책임이 있는 Object(보통 이벤트 객체를 만든 사람이 this를 넘깁니다)
  • 매개변수: path - 변경까지의 경로를 식별하는 TreePath 객체. DefaultTreeModel에서 이 객체는 사용자 데이터 객체 배열을 담지만, TreePath의 하위 클래스는 노드 ID 번호 같은 전혀 다른 메커니즘을 쓸 수도 있습니다

getTreePath

public TreePath getTreePath()

treeStructureChanged를 제외한 모든 이벤트에서 변경된 노드의 부모를 반환합니다. treeStructureChanged 이벤트에서는 구조가 변경된 곳의 조상을 반환합니다. 이 메서드와 getChildIndices는 영향을 받은 노드 목록을 얻는 데 사용합니다. 한 가지 예외는 루트를 식별하는 treeNodesChanged 이벤트로, 이 경우 이 메서드는 루트를 반환하고 getChildIndices는 null을 반환합니다.

  • 반환값: 변경된 노드를 식별하는 데 사용되는 TreePath

getPath

public Object[] getPath()

이 이벤트가 감싸는 TreePath 인스턴스에서 객체 배열을 얻는 편의 메서드입니다.

  • 반환값: Object 배열. 첫 Object는 루트에 저장된 것이고 마지막 Object는 경로가 식별하는 노드에 저장된 것입니다

getChildren

public Object[] getChildren()

getPath가 식별하는 노드의 자식으로, getChildIndices가 지정하는 위치에 있는 객체를 반환합니다. 제거 이벤트라면 반환된 객체는 더는 부모 노드의 자식이 아닙니다.

  • 반환값: 이벤트가 지정하는 자식들을 담은 Object 배열

getChildIndices

public int[] getChildIndices()

자식 인덱스 값을 반환합니다. 제거 이벤트라면 인덱스는 항목이 제거된 초기 목록의 위치를 가리킵니다. 삽입이라면 항목이 추가된 최종 목록의 위치를 가리킵니다. 노드 변경의 경우 인덱스는 수정된 노드의 위치를 가리킵니다.

  • 반환값: 이벤트가 지정하는 자식들의 인덱스 위치를 담은 int 배열

toString

public String toString()

이 객체의 프로퍼티를 표시하고 식별하는 문자열을 반환합니다.

  • 재정의: EventObject 클래스의 toString
  • 반환값: 이 객체의 문자열 표현

더 알아보기