▶ JTree
- 트리는 계층적인 데이터를 표시하는데 사용되는 컴포넌트이다.
- JTree는 단순히 데이터의 뷰만을 제공하기 때문에 트리 객체 안에는 데이터가 저장되지 않는다.
- 각각의 트리는 하나의 루트 노드(root node)를 가지고 있다. 다른 노드들(child)은 루트 노드에서 파생된다.
- 노드는 자신의 자식 노드를 가질 수 있고, 사용자가 노드를 클릭하면 자식 노드를 보이게 할 수도 있다.
- 트리는 스크롤 페인(JScrollPane) 속에 넣는 것이 일반적이다.
- 노드의 확장 상태는 이벤트를 사용하여 감지할 수 있다.
JTree |
||
생성자 |
JTree() |
비어있는 트리를 생성한다. |
JTree(TreeNode root) |
매개변수로 주어진 노드를 루트 노드로 하는 트리를 생성한다. |
|
메소드 |
void setVisibleRowCount(int row) |
화면에 나타나는 행의 수를 설정한다. |
Object getLastSelectedPathComponent() |
현재 선택된 노드를 반환한다. |
|
ThreeSelectionModel getSelectionModel() |
트리의 선택 모델을 반환한다. |
|
Object getUserObject() |
노드로 지정된 객체를 반환한다. 보통 이벤트 처리 시 노드의 이름을 가져올 때 사용한다. |
|
노드 생성자 |
DefaultMutableTreeNode() |
비어있는 트리 노드를 생성한다. |
DefaultMutableTreeNode(Object obj) |
지정된 객체를 가지고 트리 노드를 생성한다. |
|
노드 수정 메소드 |
void add(TreeNode child) |
자식 노드를 추가한다. |
TreeNode getFirstChild() | 현재 노드의 첫 번째 자식 노드를 반환한다. | |
DefaultMutableTreeNode getNextSibling() | 현재 노드의 다음 형제 노드를 반환한다. | |
TreeNode getParent() | 현재 노드의 부모 노드를 반환한다. | |
이벤트 처리 | addTreeSelectionListener(리스너 타입) | 노드를 선택할 때마다 트리 선택 이벤트(TreeSelectionEvent)가 발생하며, TreeSelectionListener 인터페이스를 구현함으로서 이벤트를 처리한다. |
- JTree 예제
public class TreeTest extends JFrame implements addTreeSelectionListener {
//FIELDS
private JPanel treePanel = new JPanel();
private JScrollPane treeScroll;
private JTree tree;
private JLabel label;
private DefaultTreeModel model; //트리 모델 인스턴스
//CONSTRUCTOR
TreeTest() {
setTitle("트리 예제");
setSize(400, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DefaultMutableTreeNode root = new DefaultMutableTreeNode("플레이 리스트");
DefaultMutableTreeNode child1 = new DefaultMutableTreeNode("힙합");
DefaultMutableTreeNode child2 = new DefaultMutableTreeNode("재즈");
DefaultMutableTreeNode child3 = new DefaultMutableTreeNode("락");
DefaultMutableTreeNode child4 = new DefaultMutableTreeNode("가요");
DefaultMutableTreeNode child5 = new DefaultMutableTreeNode("팝송");
DefaultMutableTreeNode child6 = new DefaultMutableTreeNode("동요");
root.add(child1);
root.add(child2);
root.add(child3);
root.add(child4);
root.add(child5);
root.add(child6);
DefaultMutableTreeNode child6child1 = new DefaultMutableTreeNode("아기공룡둘리");
DefaultMutableTreeNode child6child2 = new DefaultMutableTreeNode("네모의 꿈");
DefaultMutableTreeNode child6child3 = new DefaultMutableTreeNode("민들레꽃");
child6.add(child6child1);
child6.add(child6child2);
child6.add(child6child3);
tree = new JTree(root);
/* 또는 아래와 같이 하여도 된다.
tree = new JTree();
model = new DefaultTreeModel(root);
tree.setModel(model);
*/
tree.setVisibleRowCount(10);
tree.addTreeSelectionListener(this);
treeScroll = new JScrollPane(tree);
panel.add(treeScroll);
panel.add(label);
add(panel);
setVisible(true);
}
//METHODS
@Override
public void valueChanged(TreeSelectionEvent e) {
DefaultMutableTreeNode node;
node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
if(node == null) return;
String nodeName = (String) node.getUserObject(); //캐스팅은 꼭해주어야 한다.
label.setText("선택된 노드 : " + nodeName);
}
public static void main(String[] args) {
new TreeTest();
}
}
'Programming Language > JAVA' 카테고리의 다른 글
31. JMenuBar - 메뉴바 설정하기 (0) | 2017.07.13 |
---|---|
30. JColorChooser, JFileChooser - 색상 선택기, 파일 선택기 (0) | 2017.06.29 |
28. JSlider - 슬라이더 (0) | 2017.06.29 |
27. JSpinner - 스피너 (0) | 2017.06.29 |
26. JComboBox - 콤보박스 (0) | 2017.06.29 |