2012-12-12 3 views
0

두 개의 항목에 같은 아이콘이 있는지 확인하기 위해 Fest를 사용하고 있습니다.JTree에서 JLabel 가져 오기 Fest 프레임 워크 사용 (또는하지 않음)

실제로 경로와 함께 특정 항목에 액세스 할 수있는 JTreeFixture가 있습니다.

JTreeFixture tree = getTreeFromWindow(); 
JLabel label = (JLabel) tree.selectPath("/folder2/entry2").component.getCellRenderer(); 

JLabel labe2 = (JLabel) tree.selectPath("/folder2/entry3").component.getCellRenderer(); 

나는 두 JLabel의 (들)을 받고,하지만 내 Folder2와의 마지막 항목에 둘 점하고있다. Fest cant가 많이 도움이되었으므로 JTree를 직접 사용 (JTreeFixture.component() => 덕분에 JTree를 반환)하고 JTree에서 직접 정보를 추출하려고합니다.

항목의 경로를 알고 JTree에 JLabel을 포함 시키려면 어떻게해야합니까?

해결하십시오 JTreeFixture PreMadeCellRenderer가 DefaultTreeCellRenderer getTreeCellRendererComponent 컴퍼넌트를 반환하고, 그 인수 여기서

I가 사용 http://docs.oracle.com/javase/7/docs/api/javax/swing/tree/TreeCellRenderer.html을 설명 연장하는 렌더러 반환 getTreeFromWindow

public Icon getIconeFromPath(String path){ 
    JTreeFixture tree = getTreeFromWindow(); 
    PreMadeCellRenderer renderer = (PreMadeCellRenderer) tree.component().getCellRenderer().; 
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.clickPath(path).component().getLastSelectedPathComponent(); 
    JLabel label = (JLabel) renderer.getTreeCellRendererComponent(tree.component(), node, true, true, true, 0, true); 
    return label.getIcon(); 
} 

: I이 방법을 만들어 매개 변수 0 내가 무엇을 넣을 지 알지 못했기 때문에, 그리고 일했습니다 :)

답변

1

Swing은 (성능상의 이유로) 모든 공유 노드를 그리기 위해 동일한 공유 JLabel 객체를 사용합니다. 트리 노드의 사용자 객체 (일반적으로 String)를 확인하는 것이 좋습니다. Difficulties understanding the renderers mechanism of swing's JTable and JTree

+0

감사의 :

또한이 참조하십시오. 나는 이미 UesrObject를 읽는데 성공했고 나무에 포함 된 항목을 읽을 수는 있지만 트리에 표시된 아이콘을 찾고 있습니다 – Bertrand

+0

아이콘은 트리 노드에도 정적으로 지정되어 있지 않습니다. TreeCellRenderer 구현 어딘가에 노드에 아이콘을 할당하지만,이 할당은 트리 그리기 중에 만 발생합니다. – lbalazscs

+0

사실, 나는 트리 생성에 사용 된 TreeCellRenderer을 가져 오는 중 내 문제를 해결하고 해당 매개 변수로 getTreeCellRendererComponent를 호출했습니다. 나는 내가 가지고있는 아이콘에서 JLabel을 반환했다;) – Bertrand

관련 문제