2011-07-06 2 views
3

DefaultMutableTreeNode 하위 클래스를 포함하는 DefaultTreeModel이 있습니다. isLeaf() 만 덮어 쓰면 항상 노드가 확장 될 때 자식을 느리게로드하기 때문에 항상 true을 반환합니다. 그런 다음 노드가 축소되면 서버의 업데이트를 수신 거부 했으므로 해당 노드를 제거합니다 (적절한 treeNodesRemoved 이벤트가 발생 함).자식이 제거 된 후 JTree 노드에서 '확장'컨트롤을 표시 하시겠습니까?

사용자가 노드를 축소하고 하위 노드를 제거한 후에 바보 같은 작은 확장 원이 사라지는 문제가 있습니다.하지만 해당 영역을 클릭해도 노드가 확장됩니다. 자녀가 삭제되면 확장 컨트롤을 항상 표시하려면 어떻게해야합니까?

관련 항목 : Add 'expand' button to JTree node that has no children?. 가짜 아이를 추가하는 것이 유일한 방법입니까?

Expand control disappears after collapsing

+0

흠을 제시 제어 아이들을 가지고 있으며, 확장이 방법은, 나의 제안은 다른 모델을 통지하는 방법 (따라서 트리)를 시도하는 것입니다 노드가 변경되었음을 나타냅니다. 예를 들어,'TreeExpansionListener.treeCollapsed' 메소드에서'defaultMutableTreeNode.removeAllChildren()'과'defaultTreeModel.reload (defaultMutableTreeNode)'를 호출 할 수 있습니다. –

+0

아동 퇴학에 대한 자세한 설명을 해 줄 수 있습니까? 왜 이것을 필요로합니까? "서버 업데이트를 구독 취소했기 때문에"분명하지 않습니다. – MockerTim

+0

@MockerTim, 노드가 확장되면 서버에 자식을 가져오고 직접 자식에 대한 이벤트 삽입/제거/변경을 요청하는 요청을 보냅니다. 노드가 축소되면 서버에 요청을 보내 자녀에 대한 업데이트 수신을 중지합니다. 그런 다음 나는 모든 아이들을 제거합니다. 왜냐하면 나는 낡은 노드를 유지하고 싶지 않았기 때문입니다. – yonran

답변

0

내가했던 방법은 아이들이 제거 될 때 나는 가짜 아이 및 확장 리스너를 추가 입니다. 가짜 자식이있는 노드가 확장 될 것이라는 알림을 받으면 실제로 가짜 자식을 실제 지연된 자식으로 바꿉니다.

당신이 무슨 짓을했는지에 분명히 아무 문제가 없습니다 노드가 항상 항상

+0

그게 내가 한 일이야. 가짜 자식 만들기. 그리고 treeWillExpand에서 제거하는거야. 나는 isLeaf가 충분했으면 좋겠지 만 분명히 그렇지 않다. – yonran

관련 문제