2010-04-04 4 views
4

JTree을 사용할 경우 DefaultMutableTreeNode의 "사용자 개체"를 설정할 수 있습니다. 어떤 종류이든 상관 없지만 표시하려면 toString() 값이 사용됩니다. 이것은 내가 필요한 것이 아닙니다.Java Swing : JTree가 "사용자 객체"를 표시하는 방법을 정의하려면 어떻게해야합니까?

사용자 개체 표시 방법을 변경하려면 어떻게해야합니까?

참고 : 내 사용자 개체 트리 및 사용자 개체 사이의 매핑을 유지할 수있는 String 다른 뭔가로 있습니다.

답변

6

내가 문제 무엇을 얻을하지 않습니다 제공합니다.

DefaultMutableTreeNode은 의미가 있기 때문에 사용자 개체에 toString 메서드를 사용합니다. JTree에는 객체를 그리는 문자열이 필요하므로 객체에 문자열 미리보기를 요청하는 것이 좋습니다.

당신이 정말로 개체에 toString를 호출하지 않도록해야 할 경우 어쨌든의 캐릭터 rapresentation를 제공 할 수있는 방법이 필요합니다,하지만 당신은 당신의 자신의 MutableTreeNode 작성해야합니다 : 정말 돈을

class MyTreeNode implements MutableTreeNode 
{ 
    UserObject yourObject; 

    MyTreeNode(UserObject yourObject) 
    { 
    this.yourObject = yourObject; 
    } 

    // implement all needed methods to handle children and so on 

    public String toString() 
    { 
    // then you can avoid using toString 
    return yourObject.sringRapresentation(); 
    } 
} 

하지만를 이 작업을 수행 할 시점을 알 수 있습니다. 또한 toString 메서드를 재정 의하여 DefaultMutableTreeNode을 확장 할 수도 있지만 개체에 대한 추가 참조가 필요하거나 다운 캐스트이 필요합니다.

문자열과 다른 시각화가 필요한 경우 TableCellRenderer을 구현하는 자체 렌더링을 작성해야합니다.

+0

그건 정확히 내 문제였다 :이 경우에'DefaultMutableTree'의'toString()'을 오버라이드하는 것이 사용자 객체의'toString()'을 오버라이드하는 것과 같다는 것을 몰랐다. 외부 API, 그래서 그것을 할 수 없었다). –

+0

활동에 제목과 시간 필드가있는 활동 개체가있는 JTree가있는 경우 제목과 시간을 표시하는 별도의 열이있는 표에서이 개체를 사용할 수 있으며 제목 시간을 표시하려는 JTree에서이 개체를 사용할 수 있습니다 .. 그러나 toString() 메서드를 재정의 할 경우 모두 만족시킬 수 없습니다 ... – dendini

5

재정의 사용자 객체에 toString() 또는 , basic example

+1

+1 TreeCellRenderer의 경우. –

+0

렌더러를 최대한 얇게 유지하고 싶습니다. –

0

또 다른 방법은 사용자 개체에 표시되는 텍스트를 신경 쓰고 TreeCellRender를 사용하지 않으려는 경우입니다. JTree를 확장하고 convertValueToText을 해당 개체를 설명하는 문자열을 만드는 코드로 재정의하십시오.