我使用Fest來檢查兩個條目是否具有相同的圖標。從JTree獲得JLabel使用(或不)框架
我實際上有一個JTreeFixture,從我可以訪問特定條目的路徑。
JTreeFixture tree = getTreeFromWindow();
JLabel label = (JLabel) tree.selectPath("/folder2/entry2").component.getCellRenderer();
JLabel labe2 = (JLabel) tree.selectPath("/folder2/entry3").component.getCellRenderer();
我收到兩個JLabel,但它們都指向我的folder2中的最後一項。 因爲它似乎很難幫助我很多,我打算直接使用JTree(感謝JTreeFixture.component()=>返回JTree),並直接從JTree中提取信息。
如何獲得包含在JTree中的JLabel,知道條目的路徑?
解決: 我建立這個方法:
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();
}
getTreeFromWindow返回JTreeFixture PreMadeCellRenderer是延伸DefaultTreeCellRenderer getTreeCellRendererComponent返回的成分,它的參數是這裏解釋http://docs.oracle.com/javase/7/docs/api/javax/swing/tree/TreeCellRenderer.html
我使用的渲染參數0,因爲我不知道要放什麼,並且工作:)
感謝的。我已經讀過UesrObject,並且可以讀取包含在樹中的條目,但是我正在查找樹中顯示的圖標 – Bertrand
圖標也沒有靜態分配給樹節點。你有一個TreeCellRenderer實現的地方,它爲你的節點分配一個Icon,但是這個任務只在樹的繪製過程中發生。 – lbalazscs
是的,我剛剛解決了我的問題,獲取Tree創建中使用的TreeCellRenderer,並使用其參數調用getTreeCellRendererComponent。我從我的圖標中得到了一個JLabel;) – Bertrand