2012-02-24 4 views
2

속성 :의 JTree 세트 노드 이름은 내가 트리 뷰를 작성하고 다음과 같은 루트에 노드를 추가 할 수의 JTree를 사용하고

String nodeName = "node1"; 
DefaultMutableTreeNode child = new DefaultMutableTreeNode(nodeName); 
root.add(child); 

각 노드에 대한 UserObject 것은 지금 String의 유형이 있습니다. 트리를 표시 할 때 노드 이름으로 "node1"을 표시합니다.

그러나, 나는이 개 속성으로 nodeObject 클래스의 객체로 노드에 UserObject를 추가 할 : 나는 트리 노드에이 nodeObject을 추가 할 때

private class nodeObject{ 
    private String nodeName; 
    private boolean isSomethingElse; 
    public nodeObject(String name, boolean something){ 
     nodeName = name; 
     isSomethingElse = something; 
    } 
    public String getName(){ 
     return nodeName; 
    } 
    //Other setter/getter after these code 
} 

가 :

nodeObject nodeObject = new nodeObject("node1",true); 
DefaultMutableTreeNode child = new DefaultMutableTreeNode(nodeObject); 
root.add(child); 

그것은 보여줍니다 노드 이름으로 object ID. 제 질문은 노드 이름을 으로 설정하면 노드 이름으로 "node1"이 표시 될 수 있습니다.

모든 답변을 주시면 감사하겠습니다. 고맙습니다!

@Override 
public String toString() { 
    return this.nodeName; 
} 

는 다른 toString를 원한다면이 객체가 JTree에 전념하고, 다른 곳에서는 사용하지 않을 경우

+0

Nevermind, DefaultMutableTreeNode를 확장 한 자체 TreeNode를 작성한 다음 toString() 함수를 덮어 쓰면 해결할 수 있습니다. – baizen

답변

2

, 가장 쉬운 방법은 toString() 방법을 무시하고이 방법에서 이름을 반환하는 것입니다 예를 들어 디버깅 할 때 자세한 정보를 제공하는 데 사용할 수있는() 메서드를 사용하여 사용자 정의 TreeCellRenderer을 트리에 설정합니다. 이 정의는 DefaultTreeCellRenderer을 확장, 다음과 같은 방법을 무시할 수 : EDIT

@Override 
public Component getTreeCellRendererComponent(JTree tree, 
               Object value, 
               boolean sel, 
               boolean expanded, 
               boolean leaf, 
               int row, 
               boolean hasFocus) { 
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; 
    NodeObject nodeObject = (NodeObject) node.getUserObject(); 
    return super.getTreeCellRendererComponent(tree, 
               nodeObject.getName(), 
               sel, 
               expanded, 
               leaf, 
               row, 
               hasFocus); 
} 

: 코멘트에 aterai에서 언급 한 바와 같이

세 번째 솔루션은 것을, JTree가 서브 클래스하고 convertValueToText() 메소드를 오버라이드 (override)하는 것입니다 디폴트의 ​​렌더러가 호출한다. 나무에 대한 자세한 내용은 http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html을 참조하십시오.

+1

또는 'JTree # convertValueToText (...)'를 재정의하십시오. http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html> 경우에 따라 toString을 재정의하는 것이 불가능합니다. 이러한 시나리오에서는 JTree의 convertValueToText를 재정의하여 모델의 객체를 표시된 문자열로 매핑 할 수 있습니다. – aterai

+1

예. 이 방법을 가르쳐 줘서 고마워. 내 대답을 편집 할게. –

+0

감사합니다. 그것은 많은 도움이 :) – baizen