我正在使用Fest来检查两个条目是否具有相同的图标。
我实际上有一个JTreeFixture,从我可以访问特定条目及其路径。
JTreeFixture tree = getTreeFromWindow();
JLabel label = (JLabel) tree.selectPath("/folder2/entry2").component.getCellRenderer();
JLabel labe2 = (JLabel) tree.selectPath("/folder2/entry3").component.getCellRenderer();
我得到了两个 JLabel,但它们都指向我文件夹中的最后一个条目2。由于 Fest 在这里似乎对我帮助不大,我打算直接使用 JTree(感谢 JTreeFixture.component() => 返回 JTree),并直接从 JTree 中提取信息。
我怎样才能让一个JLabel包含在JTree中,知道条目的路径?
解决:我创建了这种方法:
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 返回一个 JTreeFixturePreMadeCellRenderer 是一个扩展 DefaultTreeCellRenderer 的渲染器getTreeCellRendererComponent 返回一个组件,其参数在此处解释 http://docs.oracle.com/javase/7/docs/api/javax/swing/tree/TreeCellRenderer.html
我使用参数 0 是因为我不知道要输入什么,并且工作:)
Swing 使用相同的共享 JLabel 对象来绘制所有树节点(出于性能原因)。我建议检查树节点的用户对象(通常是字符串)。
另请参阅此内容:难以理解 swing 的 JTable 和 JTree 的渲染器机制