1

我正在使用 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 返回一个 JTreeFixture PreMadeCellRenderer 是一个扩展 DefaultTreeCellRenderer 的渲染器 getTreeCellRendererComponent 返回一个组件,这里解释了它的参数http://docs.oracle.com/javase/7/docs/api/javax/swing/tree/TreeCellRenderer.html

我使用参数 0 是因为我不知道要输入什么,并且工作了 :)

4

1 回答 1

1

Swing 使用相同的共享 JLabel 对象来绘制所有树节点(出于性能原因)。我建议检查树节点的用户对象(通常是字符串)。

另见: Difficulties understand the renderers mechanism of swing's JTable and JTree

于 2012-12-12T10:56:22.643 回答