JTree

JTree (계층적 데이터를 개요 형태로 표시하는 트리)

계층적 데이터 집합을 개요(outline)로 표시하는 컨트롤입니다. 트리 사용에 대한 작업 지향 문서와 예제는 Java 튜토리얼의 "How to Use Trees"를 참고하세요.

출처: Java API Reference

본문

JTree는 계층적 데이터 집합을 개요로 표시하는 컨트롤입니다. 트리의 특정 노드는 TreePath(노드와 모든 조상을 캡슐화한 객체)나 표시 행으로 식별할 수 있으며, 표시 영역의 각 행은 하나의 노드를 표시합니다.

public class JTree extends JComponent implements Scrollable, Accessible

펼쳐진(expanded) 노드는 모든 조상이 펼쳐져 있을 때 자식을 표시하는 잎이 아닌 노드이고, 접힌(collapsed) 노드는 자식을 숨깁니다. 숨겨진(hidden) 노드는 접힌 조상 아래에 있는 노드입니다. 표시된(displayed) 노드는 볼 수 있고 표시 영역에 있어 실제로 보이는 노드입니다.

다음 JTree 메서드는 "visible"을 "displayed"(표시됨)의 의미로 사용합니다.

isRootVisible() setRootVisible() scrollPathToVisible() scrollRowToVisible()
getVisibleRowCount() setVisibleRowCount()

다음 JTree 메서드 그룹은 "visible"을 "viewable"(펼쳐진 부모 아래에서 볼 수 있음)의 의미로 사용합니다.

isVisible() makeVisible()

선택이 언제 바뀌는지 알고 싶다면 TreeSelectionListener 인터페이스를 구현하고 addTreeSelectionListener 메서드로 인스턴스를 추가합니다. 같은 노드를 두 번 클릭하면 valueChanged는 한 번만 호출됩니다.

더블 클릭 이벤트나 노드 선택 여부와 무관하게 노드 클릭을 감지하려면 다음과 같이 합니다.

final JTree tree = ...;
MouseListener ml = new MouseAdapter() {
    public void mousePressed(MouseEvent e) {
        int selRow = tree.getRowForLocation(e.getX(), e.getY());
        TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
        if(selRow != -1) {
            if(e.getClickCount() == 1) { mySingleClick(selRow, selPath); }
            else if(e.getClickCount() == 2) { myDoubleClick(selRow, selPath); }
        }
    }
};
tree.addMouseListener(ml);

그래픽 아이콘과 텍스트를 모두 담은 복합 노드를 표시하려면 TreeCellRenderer를 하위 클래스화하고 setCellRenderer(javax.swing.tree.TreeCellRenderer)로 트리에 사용하도록 지정합니다. 이런 노드를 편집하려면 TreeCellEditor를 하위 클래스화하고 setCellEditor(javax.swing.tree.TreeCellEditor)를 사용합니다.

모든 JComponent 클래스처럼 InputMapActionMap을 사용해 Action 객체를 KeyStroke와 연결하고 지정된 조건에서 실행할 수 있습니다.

더 알아보기 (Learn more)

Java 공식 API