2009-11-13 4 views
0

OpenNode, LeafNode 등과 같은 그룹에서와 달리 JTree의 특정 노드를 색칠 (및 아이콘 부여)하고 싶습니다. 어떻게해야합니까?Java Tree 노드 색 지정

답변

0

이 작업을 수행하는 가장 쉬운 방법은 DefaultMutableTreeNode을 사용하여 JTree 모델을 구성하고 특정 노드의 "사용자 개체"값을 설정 한 다음이 값을 사용하여 렌더러가 만났을 때의 동작을 결정하는 것입니다 그 노드.

처음에 우리는 간단한 모델을 구성하고 JTree 생성자에 전달 :

TreeCellRenderer renderer = new DefaultTreeCellRenderer() { 
    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { 
    // Defer to superclass to create initial version of JLabel and then modify (below). 
    JLabel ret = (JLabel) super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); 

    // We know that value is a DefaultMutableTreeNode so this downcast is safe. 
    MutableTreeNode node = (MutableTreeNode) value; 

    // Inspect user object and change rendering based on this. 
    if ("Hello".equals(node.getUserObject())) { 
     ret.setIcon(...); 
    } 

    // Could also inspect whether node is a leaf node, etc. 
    return ret; 
    } 
}; 
+0

감사 :

DefaultMutableTreeNode root = new DefaultMutableTreeNode("Hello"); DefaultMutableTreeNode child1 = new DefaultMutableTreeNode("Goodbye"); DefaultMutableTreeNode child2 = new DefaultMutableTreeNode("Bonjour"); root.add(child1); root.add(child2); JTree tree = new JTree(root); 

지금 사용자 정의 트리 셀 렌더링을 정의합니다. 이 기능은 제가 찾고 있던 기능이었습니다. – Goutham

+0

런타임시 동적으로 수행 할 수 있습니까? – Tobias

+0

예. 사용자 객체 상태 중 하나를 업데이트한다고 가정하고이 변경으로 인해 해당 DefaultMutableTreeNode가 다르게 렌더링되게하려면 AbstractTreeModel 인스턴스에서 nodeChanged를 호출하고 다시 렌더링 할 노드를 전달해야합니다. – Adamski

2

This tutorial Sun의 고유 한 노드 아이콘 설정 방법과 트리에서 리프와 리프가 아닌 것을 구분하는 방법을 보여줍니다.