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();
	}
}





+ Recent posts