JTree
JTree (계층적 데이터를 개요 형태로 표시하는 트리)
계층적 데이터 집합을 개요(outline)로 표시하는 컨트롤입니다. 트리 사용에 대한 작업 지향 문서와 예제는 Java 튜토리얼의 "How to Use Trees"를 참고하세요.
본문
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 클래스처럼 InputMap과 ActionMap을 사용해 Action 객체를 KeyStroke와 연결하고 지정된 조건에서 실행할 수 있습니다.