문제

SwingX의 TreeTableModel/AbstractTreeTableModel(특히 getValueAt(Object node, int index) 방법)?확장 또는 축소 여부에 따라 상위 노드에 대해 다른 값을 표시해야 합니다.(이것은 모델과 뷰의 분리 원칙에 위배된다는 것을 알고 있습니다. 죄송합니다!)

표준을 사용하여 JXTreeTable 개체에서 이를 확인할 수 있다는 것을 알고 있습니다. isExpanded() 그리고 isCollapsed() 하지만 모델 내에서 이를 알아야 합니다.

특히 여러 버전이 있는 객체가 있는데 JXTreeTable을 사용하여 버전 확장/축소를 지원하고 싶습니다.객체가 축소되면 상위 노드에 모든 버전의 값 요약이 표시되기를 원합니다.확장된 경우 상위 버전에 현재 버전(가장 중요한 값)만 표시하고 요약은 더 이상 필요하지 않거나 바람직하지 않습니다.

내가 의미하는 바에 대한 아이디어를 제공하는 일부 의사 코드:

getValueAt(Object node, int index) {
    if (node.hasChildren()) {
        if (node.isExpanded()) {  // this is the part I'm not sure how to implement
            return node.getCurrentValue();  // eg "Current version: C"
        }
        else {
            return node.getSummaryValue();  // eg "Current version: C; previous versions: A, B"
        }
    }
    else {
        return node.getValue();  // eg "Version: B"
    }
}

편집하다

camickr님, 제 질문이 잘못되었다는 말씀이 맞습니다!(지금은 좀 멍청한 것 같아요.)

노드의 확장 상태에 따라 표시할 값을 선택하도록 사용자 정의 TreeCellRenderer를 사용하는 것이 좋습니까?즉, 모델이 다음과 같은 것을 구현하는 객체를 제공하도록 하세요.

public interface ExpansionStateDependentValue {

    public Object getDisplayValue(boolean expanded);

}

그런 다음 TreeCellRenderer가 이 메서드를 사용하여(셀 값이 인터페이스를 구현한다고 가정) expanded 에 깃발을 꽂다 getTreeCellRendererComponent() 방법?

도움이 되었습니까?

해결책

하지만 모델 내에서 이를 알아야 합니다.

모델은 여러 View 구성 요소에서 공유될 수 있습니다.즉, 두 개의 서로 다른 JTree 개체에서 사용할 수 있습니다.따라서 노드 코드가 트리의 한 보기에서는 확장되지만 다른 보기에서는 확장되지 않을 수 있습니다.

따라서 귀하의 질문에 대한 대답은 모델이 뷰의 기능이기 때문에 이 정보를 포함하지 않는다는 것입니다.따라서 모델에서 이를 수행하려는 접근 방식은 올바르지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top